typedef
là một cấu trúc ngôn ngữ liên kết một tên với một loại.
Bạn sử dụng nó giống như cách bạn sẽ sử dụng loại ban đầu, ví dụ
typedef int myinteger;
typedef char *mystring;
typedef void (*myfunc)();
sử dụng chúng như
myinteger i; // is equivalent to int i;
mystring s; // is the same as char *s;
myfunc f; // compile equally as void (*f)();
Như bạn thấy, bạn chỉ có thể thay thế các typedefed tên với định nghĩa của nó đưa ra ở trên.
Khó khăn nằm ở con trỏ đến hàm cú pháp và khả năng đọc trong C và C ++, và typedef
có thể cải thiện khả năng đọc của các khai báo đó. Tuy nhiên, cú pháp là phù hợp, vì các hàm - không giống như các loại đơn giản khác - có thể có giá trị trả về và tham số, do đó, khai báo đôi khi dài và phức tạp của một con trỏ tới hàm.
Khả năng đọc có thể bắt đầu thực sự khó khăn với các con trỏ tới các mảng chức năng và một số hương vị gián tiếp khác.
Để trả lời ba câu hỏi của bạn
Tại sao typedef được sử dụng?
Để dễ đọc mã - đặc biệt là cho con trỏ tới các hàm hoặc tên cấu trúc.
Cú pháp có vẻ kỳ lạ (trong con trỏ để khai báo hàm)
Cú pháp đó không rõ ràng để đọc, ít nhất là khi bắt đầu. typedef
Thay vào đó, sử dụng khai báo giúp giảm bớt việc đọc
Là một con trỏ hàm được tạo để lưu trữ địa chỉ bộ nhớ của hàm?
Có, một con trỏ hàm lưu địa chỉ của hàm. Điều này không liên quan gì đến typedef
cấu trúc chỉ giúp dễ dàng viết / đọc chương trình; trình biên dịch chỉ mở rộng định nghĩa typedef trước khi biên dịch mã thực tế.
Thí dụ:
typedef int (*t_somefunc)(int,int);
int product(int u, int v) {
return u*v;
}
t_somefunc afunc = &product;
...
int x2 = (*afunc)(123, 456); // call product() to calculate 123*456