在没有括号的情况下调用C函数,如何工作?

时间:2018-05-26 02:41:46

标签: c function pointers casting structure

我知道有些问题询问你是否可以在没有括号的情况下调用函数,答案是否定的,但在我的代码中有效,我想知道原因。

typedef struct{
    //some variables
} REG;

long foo(){
    //some code
    return 23; //i.e 23, it could be any positive integer
}

REG * foo1(REG **ptr){
    //some code

    *ptr = calloc( (int) foo , sizeof(REG)); //foo without ()

    //more code
    fread(*ptr,sizeof(REG), foo(), fp); 

    return *ptr;

}

我正在使用xcode进行编译,它没有给出任何错误/警告。

1 个答案:

答案 0 :(得分:4)

也许我错过了某些内容,但这似乎是取foo函数的地址,将其转换为int,并使用int作为第一个参数(num)到calloc。这很可能会分配大量的内存,而不仅仅是你认为它分配的23个元素,这就解释了为什么fread不会导致任何错误。