理解函数指针

时间:2013-07-01 12:41:53

标签: c++ c pointers function-pointers

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'相似。为什么函数指针的行为不同。或者我错过了什么?

5 个答案:

答案 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?

修改
有些时候functionnamesizeof(&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可以分配到pf2无效。要在f2中分配pp应为int *(*p)();

答案 4 :(得分:1)

你做错了作业,即不兼容的类型

对于功能

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

正确的作业将是

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

int* (*p)();
p = f2;