编辑:好的,我认为我现在明白了:
案例1:
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function(0); // function(0) = 0
func(7);
...
}
语法没问题,但是,在运行期间,main会尝试访问地址NULL,这会导致unix环境中的Windows /分段错误导致软件崩溃。
案例2:
#include <stdio.h>
#define function(_a) ((_a)*2)
int main () {
int (*func)(int) = function;
func(7);
...
}
编译错误,因为“function”实际上是一个宏,而不是一个实际的函数,因此,指向函数的指针不能指向它,可以这么说。
案例3(正确代码):
#include <stdio.h>
int function(int _a){return ((_a)*2);};
int main () {
int (*func)(int) = function;
func(7);
...
}
这次我做对了吗?
答案 0 :(得分:4)
这条线不是你想象的那样。
int (*func)(int) = 0;
它是指向具有签名int somename(int)
的函数的指针的变量(称为func),并且您将其设置为0.
为了更好地理解,请考虑以下事项:
int myfunction(int a) { return 5;}
然后这将起作用
int (*func)(int) = myfunction;
答案 1 :(得分:0)
int (*func)(int) = 0;
表示func
是函数指针,即pointer to a function
,因此(*func)
返回integer
即int
在语句中,integer
作为参数,即(int)
。将int (*func)(int)
分配给0
表示函数指针已指定为指向NULL
。