gpt4 book ai didi

通过函数指针调用函数

转载 作者:行者123 更新时间:2023-11-30 16:50:50 28 4
gpt4 key购买 nike

我不知道如何通过指针调用函数。

例如我有这个指针:int (*ptr)() = a_function;

要调用函数,我必须编写类似 ptr()(*ptr)()

这些调用有什么区别?如果我写 printf("%p - %p", ptr, *ptr) 我将在这两种情况下得到一个地址

最佳答案

两者都有效。

这是因为当您在表达式中使用函数时,它会立即衰减为指针 - 除非它是 & 的操作数,在这种情况下您无论如何都会获得指向该函数的指针。

因此,当您编写类似 printf("hi") 的内容时,函数调用运算符 () 带有两个操作数:printf ,以及一个由一个值 "hi" 组成的参数列表。

printf是一个函数,它不是&的操作数,所以函数调用操作符()实际得到的是一个函数< em>指针。这就是 ptr() 在您的示例中起作用的原因:函数调用被定义为无论如何都可以使用函数指针。

那么(*ptr)()又如何呢?嗯,ptr 是一个函数指针,您可以取消引用它来获取函数...它会立即衰减回指针,因此它可以与 () 一起使用调用它。

同样的事情也适用于 printf (或任何其他函数)。 (*printf)() 出于几乎相同的原因也是有效的:printf 衰减为函数指针,该指针被 * 取消引用到函数,它立即再次衰减为指针。

关于通过函数指针调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42046155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com