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'相似。为什么函数指针的行为不同。或者我错过了什么?
答案 0 :(得分:3)
int* f2(){}
不接受任何内容的函数,并返回指向int 的指针。
int (*p)();
指向以下内容的指针:一个不接受任何内容并返回 int
的函数您的类型不匹配。 p
不是指向f2
如果您无法理解这些定义,就像所有凡人一样,请使用spiral rule of thumb
答案 1 :(得分:3)
p=f2;
错误,因为不兼容的类型。 f2
是一个可以返回int*
的函数,而p
是指向函数的指针,可以指向函数返回int
,例如f1()
。 int* f2()
对于 int* (*p2)(); // pointers to function f2
p2 = f2;
,您可以定义一个指向如下函数的指针:
&
此外,您不需要在函数名之前使用&functionname
,只需要函数名即可。
这是一个很好的链接:Why do all these crazy function pointer definitions all work? What is really going on?
修改强>:
有些时候functionname
和sizeof(&functionname)
不相同,例如sizeof(functionname)
is not valid而{{1}}完全有效。
答案 2 :(得分:2)
这是一个返回int*
int* f2(){}
所以你需要:
(int*) (*q)();
q = f2;
答案 3 :(得分:1)
p
是指向函数的指针,它接受void参数并返回整数。
f1
是一个接受void参数并返回整数的函数。
f2
是一个带void参数并返回指向整数的函数。
现在根据定义,您可以看到f1
可以分配到p
但f2
无效。要在f2
中分配p
, p
应为int *(*p)();
答案 4 :(得分:1)
你做错了作业,即不兼容的类型
对于功能
int f1(){}
int* f2(){}
正确的作业将是
int (*p)();
p = f1;
int* (*p)();
p = f2;