我知道typedef是幹什麼的,但是這個說法似乎讓我感到困惑。這個typedef聲明是做什麼的?
typedef int (*funcptr)();
這個聲明
funcptr pf1,pf2
表示該
int (*pf1)(),(*pf2)();
但隨後如何在程序中使用pf1
和pf2
。如何輸入這些值。 它有什麼用處。
我知道typedef是幹什麼的,但是這個說法似乎讓我感到困惑。這個typedef聲明是做什麼的?
typedef int (*funcptr)();
這個聲明
funcptr pf1,pf2
表示該
int (*pf1)(),(*pf2)();
但隨後如何在程序中使用pf1
和pf2
。如何輸入這些值。 它有什麼用處。
您的typedef
定義了函數指針的類型。取一個函數指針的「值」沒有意義:它是指向一段可執行代碼的指針;你需要調用它來使它有用。
您可以通過指針調用一個函數,就像它是一個按名稱已知的函數一樣,即通過向指針附加一個帶括號的參數列表。
這裏是你可以用pf1
或pf2
做什麼:
// These functions return an int and take no parameters.
// They are compatible with funcptr
int function5() {
return 5;
}
int functionAsk() {
int res;
printf("Enter a value: ");
scanf("%d", &res);
return res;
}
// This function does not know what fp1 does, but it can use it
void doSomething(funcptr fp1) {
int res = fp1();
printf("Function returned %d", res);
}
// Here is how you can call doSomething with different function pointers
pf1 = functionAsk;
doSomething(pf1);
pf2 = function5;
doSomething(pf2);
注意如何在最後四行的doSomething
兩次調用執行基於您通過什麼不同的任務:第一個呼叫提示用戶輸入一個入口,而第二個電話立即返回五個。
這是一個非常人造的示例代碼,但它說明了如何使用typedef
函數指針。
#include <stdio.h>
typedef int (*funcptr)();
int return1(void){return 1;}
int return2(void){return 2;}
int main()
{
funcptr pf1, pf2;
pf1 = return1;
pf2 = return2;
printf("%d, %d\n", pf1(), pf2());
return 0;
}
輸出:1, 2
PF1和PF2是函數指針現在...如果你想它們指向你應該寫一個函數PF1 = yourfunctionname ..