2013-06-25 31 views
10

Nói chung, chúng tôi sử dụng typedef để lấy tên thay thế cho các kiểu dữ liệu. Ví dụ:typedef int (* pf) cần giải thích

typedef long int li; // li can be used now in place of long int 

Nhưng typedef dưới đây làm gì?

typedef int (*pf) (int, int); 
+2

[cdecl] (http://cdecl.org) để giải cứu! – milleniumbug

+2

có thể trùng lặp của [con trỏ hàm Typedef?] (Http://stackoverflow.com/questions/4295432/typedef-function-pointer) – user93353

+0

@milleniumbug: Bạn đã thử chưa? Lỗi cú pháp! – MatthewD

Trả lời

21
typedef int (*pf) (int, int); 

Điều này có nghĩa rằng các biến khai báo với kiểu pf là con trỏ đến một chức năng mà phải mất hai int tham số và trả về một int.

Nói cách khác, bạn có thể làm một cái gì đó như thế này:

#include <stdio.h> 

typedef int (*pf)(int,int); 

int addUp (int a, int b) { return a + b; } 

int main(void) { 
    pf xyzzy = addUp; 
    printf ("%d\n", xyzzy (19, 23)); 
    return 0; 
} 
+1

Ví dụ tuyệt vời, +1 – lnafziger

+0

@ Yu Hao Ví dụ hay, cảm ơn! – phoenix

0

Đó là một nguyên mẫu con trỏ hàm. Sau đó bạn có thể khai báo một chức năng như một cái gì đó lập luận như thế này:

void RegisterCallback(pf your_callback_func); 

Sau đó, bạn có thể có thể gọi hàm truyền như một func ptr:

... 
your_callback_func(i, j); 
... 
0

Các typedef có tên pf và nó là dành cho một con trỏ hàm nhận hai số nguyên làm đối số và trả về một số nguyên.

0

typedef công trình như:

Xác định unknown type với known types.

Vì vậy, nó định nghĩa loại hàm lấy hai đối số int và trả về int.

4
typedef long int li; 

gán tên thay thế li để nhập long int.

Trong chính xác theo cùng một cách

typedef int (*pf) (int, int); 

gán thay thế tên pfint (*) (int, int). Đó là tất cả để có nó.

Như bạn có thể nhận thấy, các khai báo typedef cũng tuân theo cùng một cú pháp như khai báo biến. Sự khác biệt duy nhất là tên biến mới được thay thế bằng tên kiểu mới. Vì vậy, theo cú pháp khai báo C, tên khai báo có thể xuất hiện "ở giữa" của người khai báo, khi mảng hoặc các kiểu hàm có liên quan.

Đối với một ví dụ khác

typedef int A[10]; 

tuyên bố A tên như thay thế cho loại int [10]. Trong ví dụ này tên mới cũng xuất hiện "ở giữa" của khai báo.

+0

Độc đáo giải thích .. :) – phoenix

Các vấn đề liên quan