【发布时间】:2014-06-18 22:51:33
【问题描述】:
我浏览了一些帖子并注意到指针可以根据sizeof 的大小不同,具体取决于代码编译和运行的架构。对我来说似乎足够合理(即:32 位架构上的 4 字节指针,64 位上的 8 字节指针,完全有意义)。
令我吃惊的一点是,指针的大小可能会根据它指向的数据类型而有所不同。我会假设,在 32 位架构上,所有指针的大小都是 4 字节,但事实证明函数指针的大小可以不同(即:比我预期的要大)。为什么会这样,在 C 编程语言中?我发现一篇文章解释了 C++,以及 the program may have to cope with virtual functions 如何解释这一点,但这似乎不适用于纯 C。此外,似乎不再需要使用“远”和“近”指针,所以我没有看到那些进入等式的人。
那么,在 C 语言中,有什么理由、标准或文档描述了为什么在同一架构上并非所有指针的大小都相同?
谢谢!
【问题讨论】:
-
请告诉我们您看到的 char * 指针和 (*fn)() 指针的平台(Linux?Windows?x86?amd64?)、编译器(MSVC?GCC?)和 sizeof()这种行为。
-
除了@FoggyDay 的请求之外,请提供一些示例代码来演示此行为。
-
再次欺骗。 stackoverflow.com/questions/3520059/…。这似乎出现了很多。
-
@SeanPerry 这个问题值得重复。而且这里的答案质量不同(更好+参考)。