This answer附带了一个有趣的声明 - “在int*
小于char*
”的机器上。 (让我们排除指向函数的指针)
指向不同类型的指针是否有可能具有不同的大小?为什么这会有用?
答案 0 :(得分:14)
是的,这完全有可能。在某些机器上,指向字节的指针包含两个值:指向包含字节的存储器字的WORD地址的指针,以及给出字内字节位置的“字节索引”。例如。在32位机器上,“字节索引”是0..3。
这需要比“int *”更多的存储空间,“int *”只是指向相关单词的指针。
答案 1 :(得分:6)
在单词寻址的计算机上,char*
可能需要包含部分字词信息,使其大于int*
。
标准允许这样做,而不是排除在这些硬件上的实现(即使现在比设计C89时更加罕见)。
答案 2 :(得分:5)
language-lawyer标记表示您询问的是C ++及其兼容的实现,而不是某些特定的物理机器。
为了证明这一点,我必须引用整个标准,但简单的事实是它不能保证任何sizeof(T*)
T
的结果,并且(作为推论) )不保证任何sizeof(T1*) == sizeof(T2*)
和T1
的{{1}}。
答案 3 :(得分:4)
是的,指针不能保证具有相同的大小,尽管在大多数现代架构中它们都是实际的。
当有人关注数据与函数指针时,这可能有用。从历史上看,函数指针(用于本质上跳转到可执行代码中的某些部分)需要所谓的“远指针”,它比数据指针更宽。
答案 4 :(得分:2)
我可以想象一个机器,假设int
数组的内存需求远远小于char
数组的内存需求,这是有意义的。
char
个数组。在这种情况下,一个字节可能足够int*
,而char*
需要四个字节或更多。
这是一个理论愿景。