c - 函数指针的大小取决于哪些参数?

标签 c pointers function-pointers

<分区>

我只是想从内存的角度了解可能影响函数指针大小的各种原因。

我想强调的是,我的问题不是关于如何使用函数指针以及如何对它们进行类型转换。这只是关于如果我声明一个像

这样的函数指针
 int (*fptr)(int, int);

并为其创建一个变量

fptr fun1;

如果我在 32/64 位机器上运行它,我期望获得的大小是多少?

是否有可能仅通过查看其声明来确定函数指针的大小,就像我知道 void 指针在 32 位机器上的大小为 4 个字节一样。

最佳答案

兰戈,看here :

__SIZEOF_POINTER__ // Pre-defined GCC macro

对于 MS Visual C/C++ 编译器,您可以检查宏 _WIN64_M_IX86 和其他指示目标处理器架构的宏。完整列表 here .

附言经过一番思考后,我不得不承认我关于函数指针的大小将与 void* 相同的说法是错误的(我可以想象数据和代码的内存地址可能不同的架构)。无论如何,关于“是否有可能确定函数指针的大小”这个问题,考虑到我在评论中得到的澄清,OP 与 gcc 一起工作,__SIZEOF_POINTER__可以作为答案。虽然 @2501 在他们的评论中提供的答案要好得多 - sizezeof(fptr) 应该适用于任何编译器

关于c - 函数指针的大小取决于哪些参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38229296/

相关文章:

c - 遍历C中的目录

c - 释放函数内部的指针,并在 main 中使用它

c++ - 有人可以解释参数 void(*pfn)(void*) 吗?

c++ - 创建的文件中的文件 I/O

c - 将数组引用到指针

c++ - 从函数返回的堆分配

c++ - 函数指针赋值在 C 中有效,但在 C++ 中无效

c - 快速检查 C99 中函数指针的结构是否为 NULL

c++ - 如何将我的应用程序窗口之一保持在同一应用程序的其他窗口之上?

c - 释放由另一个二进制文件分配的内存