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”。为什么函数指针的行为不同。还是我错过了什么?
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”。为什么函数指针的行为不同。还是我错过了什么?
int* f2(){}
一个不接受任何内容并返回指向 int 的指针的函数。
int (*p)();
指向的指针:不接受任何内容并返回int的函数
你有一个类型不匹配。p
不是指向类型的指针f2
如果您像所有凡人一样难以理解这些定义,请使用螺旋经验法则
p=f2;
错误,因为类型不兼容。f2
是一个可以返回a的函数,int*
而是p
指向可以指向函数的函数的指针,返回int
例如f1()
对于int* f2()
,您可以定义一个指向函数的指针,如下所示:
int* (*p2)(); // pointers to function f2
p2 = f2;
此外,您不需要&
在函数名之前使用,只需函数名就足够了。这是一个很好的阅读链接:为什么所有这些疯狂的函数指针定义都有效?到底发生了什么?
编辑:
有时并不相同&functionname
,例如无效,而完全有效。functionname
sizeof(functionname)
sizeof(&functionname)
这是一个返回的函数int*
int* f2(){}
所以你需要:
(int*) (*q)();
q = f2;
p
是指向采用 void 参数并返回整数的函数的指针。
f1
是一个接受 void 参数并返回整数的函数。
f2
是一个接受 void 参数并返回指向整数的指针的函数。
现在根据定义,您可以看到f1
可以分配p
但f2
不能。要分配f2
in p
,声明p
应该是int *(*p)();
你做了错误的分配,即不兼容的类型
对于函数
int f1(){}
int* f2(){}
正确的分配是
int (*p)();
p = f1;
int* (*p)();
p = f2;