4
int f1(){}
int* f2(){}

int main()
{
    int *a;//1
    int b;
    int *c;
    a=c; 
    a=&b; 

    int (*p)(); //2
    p=f2; //showing error
    p=&f1;
}

我希望在我的程序中,“2”的行为必须类似于“1”。为什么函数指针的行为不同。还是我错过了什么?

4

5 回答 5

3
int* f2(){}

一个不接受任何内容并返回指向 int 的指针的函数。

int (*p)();

指向的指针:不接受任何内容并返回int的函数

你有一个类型不匹配。p不是指向类型的指针f2

如果您像所有凡人一样难以理解这些定义,请使用螺旋经验法则

于 2013-07-01T12:44:08.460 回答
3

p=f2;错误,因为类型不兼容。f2是一个可以返回a的函数,int*而是p指向可以指向函数的函数的指针,返回int例如f1()

对于int* f2(),您可以定义一个指向函数的指针,如下所示:

 int* (*p2)();   // pointers to function f2
 p2 = f2;

此外,您不需要&在函数名之前使用,只需函数名就足够了。这是一个很好的阅读链接:为什么所有这些疯狂的函数指针定义都有效?到底发生了什么?

编辑
有时并不相同&functionname,例如无效,而完全有效。functionnamesizeof(functionname)sizeof(&functionname)

于 2013-07-01T12:44:45.217 回答
2

这是一个返回的函数int*

int* f2(){}

所以你需要:

(int*) (*q)();
q = f2; 
于 2013-07-01T12:44:57.133 回答
1

p是指向采用 void 参数并返回整数的函数的指针。

f1是一个接受 void 参数并返回整数的函数。

f2是一个接受 void 参数并返回指向整数的指针的函数。

现在根据定义,您可以看到f1可以分配pf2不能。要分配f2in p,声明p应该是int *(*p)();

于 2013-07-01T12:45:39.930 回答
1

你做了错误的分配,即不兼容的类型

对于函数

int f1(){}
int* f2(){}

正确的分配是

int (*p)(); 
p = f1;

int* (*p)();
p = f2;
于 2013-07-01T12:45:41.460 回答