2010-04-07 56 views
2

檢查下面的代碼函數指針演示

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

void functionptrdemo() 
{ 
    typedef int *(funcPtr) (int,int); 
    funcPtr ptr; 
    ptr = add; //IS THIS CORRECT? 
    int p = (*ptr)(2,3); 
    cout<<"Addition value is "<<p<<endl; 
} 

在我嘗試指派功能PTR具有相同的函數簽名功能的地方,它顯示了一個編譯錯誤作爲錯誤C2659:「=」:功能左操作數

回答

10

這很可能是你打算寫是不是:

typedef int *(funcPtr) (int,int); 

但:

typedef int (*funcPtr) (int,int); 
+1

答案很完美。謝謝 – AKN 2010-04-07 07:09:30

+0

@KN:如果答案是完美的,你應該接受它。 – sbi 2010-04-07 07:14:21

+0

@sbi:我立即嘗試過。但該網站不允許我在5分鐘內接受答案:) – AKN 2010-04-07 07:18:25

2

亞歷克斯答案是正確的。 但好做法會

ptr = &add; 

如果你這樣寫如下:

ptr = add; 

它是假設你想 存儲功能添加的地址的編譯器。 所以我們不要讓編譯器假設。

+1

有沒有假設函數只能存儲爲指針 – 2010-04-07 09:07:55

+5

爲什麼?這不像是有任何含糊之處。你是否也避免了數組對指針的隱式衰減,並使用'&array [0]'而不是'array'?你是否通過'(* func)(arg)'調用函數指針? – jamesdlin 2010-04-07 09:45:01