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'。为什么函数指针的行为不同。或者我错过了什么?了解函数指针
p=f2;
错误,因为不兼容的类型的类型。 f2
是一个函数,可以返回int*
,而p
是指向函数的指针,可以指向函数返回int
例如, f1()
为int* f2()
,你可以定义一个指针方式如下所示:
int* (*p2)(); // pointers to function f2
p2 = f2;
此外,你不需要之前函数名使用&
只是函数名就足够了。 这里是一个很好的链接阅读:Why do all these crazy function pointer definitions all work? What is really going on?
编辑:
一段时间&functionname
和functionname
不相同例如sizeof(functionname)
is not valid而sizeof(&functionname)
是完全有效的。
谢谢。但为什么p2 = f2;?为什么不是p2 = &f2; – Alex
@Alex,这两种形式在功能上是可以互换的。 – StoryTeller
@Alex你可以尝试'p = ***************************************** ** f2;' – johnchen902
int* f2(){}
接受任何操作,并返回一个指针为int的函数。
int (*p)();
一个指向:接受什么,并返回一个INT
你有一个类型不匹配的功能。 p
不是一个指向f2
如果你无法理解这样的定义,像所有凡人做,使用spiral rule of thumb
谢谢链接 – Alex
这是返回int*
int* f2(){}
的功能所以,你需要:
(int*) (*q)();
q = f2;
p
是函数指针服用无效参数并返回整数。
f1
是一个以void参数和返回整数为函数的函数。
f2
是一个采用void参数并返回指向整数的函数的函数。
现在按定义,你可以看到f1
可以分配给p
但f2
can't.To在p
分配f2
的p
申报应int *(*p)();
你犯了错的任务我。È不兼容的类型
对于功能
int f1(){}
int* f2(){}
正确指派将是
int (*p)();
p = f1;
int* (*p)();
p = f2;
'f2'是返回指针到'int'的函数(和将被转换成一个'INT *(*)()'在行'p = f2;'如果编译的话)。 'p'是一个指向返回'int'的函数的指针。不兼容的类型。 –
这里有一个技巧来帮助轻松声明函数指针类型:'typedef int type_of_f1();'。现在只需添加一个星号,然后用'type_of_f1 * p;'来声明一个适用于f1的函数指针。 –
好[图书](www.cs.rit.edu/~ats/books/ooc.pdf)的 –