【发布时间】:2019-02-12 11:40:03
【问题描述】:
C 中的小代码 sn-ps。
#include<stdio.h>
int main()
{
printf("%zu\n%zu\n", sizeof(char*), sizeof(double*));
}
输出:(GCC 64 位)
8
8
sizeof(char*) 是否总是等于sizeof(double*)?
C 标准对此有何评论?
【问题讨论】:
-
不,没有这样的保证。从历史上看,有些平台指向不同事物的指针可能有不同的大小(IIRC)。但在现代 PC 类型的系统上,它们都是一样的。
-
对了,你问这个干嘛?单纯的好奇,还是有一个潜在的问题需要解决?
-
@SouravGhosh 你能回顾一下你的欺骗决定吗?我觉得这个问题有一个新的方面,两个指针(即不是一个)指向一个系统上的不同类型(即不相同)。提议的骗子讨论了对一个指针大小的保证(没有)以及跨系统的相同类型的指针大小的差异(它们可能会有所不同)以及类型大小与指针大小相同类型的差异(完全不同的东西,大小比较毫无意义)。他们没有讨论“在一个系统/实现中两个指针的大小可以不同吗?” (这是我对这里OP核心的理解)。
-
FryGy 的答案只是“可以是 8”,这是关闭的。 (你可能不是指这个......)大卫的回答确实说明了两种指针大小的非保证,我同意。但我觉得这并没有让这个问题成为那个问题的傻瓜,因为这个问题基本上是“所有指针的大小都是 4 吗?”这是一个比这里更严格的问题。答案有一个细节,也在这里回答了这个问题。但我对重复的理解是“你问同样的问题”。带有一种可能被认为是“你自己也可以找到那个”的语气。 @SouravGhosh
-
我发现问题之间存在相似且相关的差异,例如“两个人可以有不同的颜色吗?”和“两个人类姐妹可以有不同的颜色吗?”两种情况下的正确答案都是“是”。但要给第二个答案,需要更多的推理。欺骗提案的答案就是这样推理,但问题仍然不同。这两个问题都是“人类颜色可以不同吗?”的变体。 @SouravGhosh