0

编辑:好的,我想我现在明白了:

情况1:

#include <stdio.h>
#define function(_a) ((_a)*2)

int main () {
    int (*func)(int) = function(0); // function(0) = 0
    func(7);
...
}

语法没问题,但是,在运行时,main 将尝试访问地址 NULL ,这将导致 windows 中的软件崩溃/unix 环境中的分段错误。

案例二:

#include <stdio.h>
#define function(_a) ((_a)*2)

int main () {
    int (*func)(int) = function;
    func(7);
...
}

编译错误,因为“函数”实际上是一个宏,而不是一个实际的函数,因此,指向函数的指针不能指向它,可以这么说。

案例3(正确代码):

    #include <stdio.h>

    int function(int _a){return ((_a)*2);};

    int main () {
        int (*func)(int) = function;
        func(7);
    ...

}

这次我做对了吗?

4

2 回答 2

4

这条线不是你想的那样。

 int (*func)(int) = 0;

它是一个变量(称为 func),指向具有签名的函数的指针,int somename(int)您将其设置为 0。

为了更好地理解,请考虑以下内容:

int myfunction(int a) { return 5;}

那么这将工作

 int (*func)(int) = myfunction;
于 2013-03-28T03:38:57.497 回答
0

int (*func)(int) = 0;meanfunc是一个函数指针ie pointer to a function,因此在语句中首先(*func)返回一个integerie int,并将 aninteger作为参数 ie (int)。赋值int (*func)(int)0意味着函数指针被赋值为指向NULL

于 2013-03-28T03:37:52.457 回答