【问题标题】:Is `sizeof(char*)` always equal to `sizeof(double*)`? [duplicate]`sizeof(char*)` 是否总是等于`sizeof(double*)`? [复制]
【发布时间】: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

标签: c pointers sizeof


【解决方案1】:

sizeof(char*)sizeof(double*) 都是指针的大小。因此,在任何可以想象的系统上,它们很可能是相同的。

然而,理论上,一个实现可能有不同的方法来引用不同的数据类型。我可以想象一个具有小尺寸优化内存方案的系统,例如单字节普通旧数据位于特殊位置,隐含“仅”32 位指针,而它在更大的区域中执行更大的复合构造,需要 64 位指针。
因此,无法保证这种看似“显而易见”的假设。

这当然假设一切都在同一个系统上,指针大小可以并且确实在不同系统之间有所不同。

【讨论】:

    【解决方案2】:

    不仅如此,每当您打印指针变量时,您都会得到相同的值。因为指针变量用来保存变量的地址。

    【讨论】:

    • (a) C 标准不要求不同类型的指针大小相同。 (b) 指向同一位置的指针可能有不同的表示,使用%p 打印指针的结果是实现定义的,不一定为指向同一位置的所有指针生成相同的字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 2012-02-13
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多