要求澄清关于类型演员

时间:2013-03-28 03:33:40

标签: c casting

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

案例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);
    ...

}

这次我做对了吗?

2 个答案:

答案 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)返回integerint在语句中,integer作为参数,即(int)。将int (*func)(int)分配给0表示函数指针已指定为指向NULL