在 C 中调用不带括号的函数如何工作?

标签 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 中编译,它没有给出错误/警告。

最佳答案

也许我遗漏了什么,但这看起来像是在获取 foo 函数的地址,将其转换为 int,然后使用那个 int 作为 calloc 的第一个参数 (num)。这很可能会分配大量内存,而不是只够您认为它正在分配的 23 个元素,这就解释了为什么 fread 不会导致任何错误。

关于在 C 中调用不带括号的函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50538849/

相关文章:

c++ - 求数字平方根的程序

c - 字符串数组访问错误

c - c中全局变量和堆变量有什么异同?

c++ - 函数内的指针行为

function - 有人可以解释函数 mkpp 和 ppval 的行为吗?

Python:重新定义函数,使其引用自己

C 使用指针比较数组元素

c - 当我使用 free() 时,C 中的程序随机崩溃

PHP While 语句显示与查询结果相同的结果

c - 区分嵌入式 NUL 和 NUL 终止符