2013-09-25 258 views
0

我知道typedef是幹什麼的,但是這個說法似乎讓我感到困惑。這個typedef聲明是做什麼的?

typedef int (*funcptr)(); 

這個聲明

funcptr pf1,pf2 

表示該

int (*pf1)(),(*pf2)(); 

但隨後如何在程序中使用pf1pf2。如何輸入這些值。 它有什麼用處。

回答

1

您的typedef定義了函數指針的類型。取一個函數指針的「值」沒有意義:它是指向一段可執行代碼的指針;你需要調用它來使它有用。

您可以通過指針調用一個函數,就像它是一個按名稱已知的函數一樣,即通過向指針附加一個帶括號的參數列表。

這裏是你可以用pf1pf2做什麼:

// 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兩次調用執行基於您通過什麼不同的任務:第一個呼叫提示用戶輸入一個入口,而第二個電話立即返回五個。

1

這是一個非常人造的示例代碼,但它說明了如何使用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

1

PF1和PF2是函數指針現在...如果你想它們指向你應該寫一個函數PF1 = yourfunctionname ..