指针可以有不同的大小吗?

Luc*_*ore 16 c++ pointers language-lawyer

这个答案附带了一个有趣的声明 - "在int*小于a的机器上char*".(让我们排除指向函数的指针)

指向不同类型的指针是否有可能具有不同的大小?为什么这会有用?

Mat*_*son 14

是的,这完全有可能.在某些机器上,指向字节的指针包含两个值:指向包含字节的存储器字的WORD地址的指针,以及给出字内字节位置的"字节索引".例如,在32位机器上,"字节索引"是0..3.

这将需要比"int*"更多的存储空间,"int*"只是指向相关单词的指针.

  • @MartinVidner:我刚刚为你发明了一个. (9认同)
  • 8086分段内存模型.近指针16位,远指针20/32位. (2认同)

Bo *_*son 6

在单词寻址的机器上,char*可能需要包含部分单词信息,使其大于int*.

该标准允许这样做,而不是排除在这种硬件上的实现(尽管现在比设计C89时更加罕见).


Lig*_*ica 5

标签意味着你是问有关C++和它的兼容实现,而不是一些特定的物理机.

我不得不引用整个标准为了证明这一点,但一个简单的事实是,它使对结果没有保证sizeof(T*)任何T,和(作为一个必然结果)不能保证sizeof(T1*) == sizeof(T2*)任何T1T2).