2010-04-07 58 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