了解函数指针
Understanding 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"。为什么函数指针的行为不同。还是我错过了什么?
p=f2;
错误,因为类型不兼容。 f2
是一个可以返回int*
的函数,而p
是指向可以指向返回int
函数的函数的指针,例如 f1()
对于int* f2()
,您可以定义一个指向函数的指针,如下所示:
int* (*p2)(); // pointers to function f2
p2 = f2;
此外,您不需要在函数名称之前使用&
,只需函数名称就足够了。这里有一个很好的阅读链接:为什么所有这些疯狂的函数指针定义都有效?这到底是怎么回事?
编辑:
有时&functionname
和functionname
不一样,例如 sizeof(functionname)
是无效的,而sizeof(&functionname)
是完全有效的。
int* f2(){}
一个不接受任何内容并返回指向 int 的指针的函数。
int (*p)();
指向的指针:不接受任何内容并返回 int 的函数
类型不匹配。 p
不是指向f2
类型的指针
如果你像所有凡人一样难以理解这些定义,请使用螺旋经验法则
>这是一个返回int*
的函数
int* f2(){}
所以你需要:
(int*) (*q)();
q = f2;
>p
是指向函数的指针,采用void参数并返回整数。
f1
是一个接受 void 参数并返回整数的函数。
f2
是一个采用 void 参数并返回指向整数的指针的函数。
现在,根据定义,您可以看到f1
可以分配给p
但f2
不能。要在p
中分配f2
,应int *(*p)();
p
您做了错误的分配,即不兼容的类型
对于函数
int f1(){}
int* f2(){}
正确的分配是
int (*p)();
p = f1;
int* (*p)();
p = f2;
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址