C 指向指针的指针的字节大小?
指向指针的指针的字节大小是多少?它是否与常规指针的字节大小相同(在32位机器上通常为4,在64位机器上为8,但并不总是如此) 例如:C 指向指针的指针的字节大小?,c,pointers,C,Pointers,指向指针的指针的字节大小是多少?它是否与常规指针的字节大小相同(在32位机器上通常为4,在64位机器上为8,但并不总是如此) 例如: int *p; int **q; 指向指针q的指针是什么?标准不保证指针的大小相等。它只保证sizeof(char)等于1 所以int*的大小不必与float*的大小相同 因此,要回答您的问题,一个int*的大小不能“保证”等于int**的大小 但在大多数编译器上,int*的大小等于int** 这是C99的一个片段: 6.2.5.26 指向void的指针应具有相
int *p;
int **q;
指向指针q的指针是什么?标准不保证指针的大小相等。它只保证sizeof(char)等于1 所以
int*
的大小不必与float*
的大小相同
因此,要回答您的问题,一个int*
的大小不能“保证”等于int**
的大小
但在大多数编译器上,int*
的大小等于int**
这是C99的一个片段:
6.2.5.26
指向void的指针应具有相同的表示和对齐方式
要求作为指向字符类型的指针。(39)类似地,指针
兼容类型的合格或不合格版本应具有
相同的表示和对齐要求。所有指向
结构类型应具有相同的表示和对齐方式
需求是相互关联的。所有指向联合类型的指针应具有
彼此具有相同的表示和对齐要求。
指向其他类型的指针不需要具有相同的表示形式或
对齐要求
39)相同的表示和对齐要求旨在
暗示作为函数参数的互换性,从
职能和工会成员
标准不保证指针的大小相等。它只保证sizeof(char)等于1 所以
int*
的大小不必与float*
的大小相同
因此,要回答您的问题,一个int*
的大小不能“保证”等于int**
的大小
但在大多数编译器上,int*
的大小等于int**
这是C99的一个片段:
6.2.5.26
指向void的指针应具有相同的表示和对齐方式
要求作为指向字符类型的指针。(39)类似地,指针
兼容类型的合格或不合格版本应具有
相同的表示和对齐要求。所有指向
结构类型应具有相同的表示和对齐方式
需求是相互关联的。所有指向联合类型的指针应具有
彼此具有相同的表示和对齐要求。
指向其他类型的指针不需要具有相同的表示形式或
对齐要求
39)相同的表示和对齐要求旨在
暗示作为函数参数的互换性,从
职能和工会成员
您没有明确说明您询问的语言版本。C99经济特区: 指向对象或不完整类型的指针可能会转换为 指向其他对象或不完整类型的指针。如果结果是 指针未正确对齐57)对于指向的类型 行为是未定义的。否则,当再次转换回时 结果应与原始指针相同 在第6.3.2.3节中 这就保证了所有指针的大小都是一样的
不,正如波塔托斯瓦特所指出的。转换功能不能保证相同的大小。您没有确切指定要查询的语言版本。C99经济特区: 指向对象或不完整类型的指针可能会转换为 指向其他对象或不完整类型的指针。如果结果是 指针未正确对齐57)对于指向的类型 行为是未定义的。否则,当再次转换回时 结果应与原始指针相同 在第6.3.2.3节中 这就保证了所有指针的大小都是一样的
不,正如波塔托斯瓦特所指出的。转换能力不能保证大小相同。您猜怎么着?指向指针的指针毕竟只是一个普通指针。sizeof(p)==sizeof(q)虽然严格来说是标准的迂腐,但我认为标准并没有说所有指针都是相同大小的。所有对象指针都是相同大小的。函数指针不必与对象指针大小相同。@JonathanLeffler不正确。在旧Cray上,由于架构上的原因,与现代GPU向量处理器没有什么不同,寻址单个
char
比寻址一个向量字需要更多的位。你猜呢?指向指针的指针毕竟只是一个普通指针。sizeof(p)==sizeof(q)虽然严格来说是标准的迂腐,但我认为标准并没有说所有指针都是相同大小的。所有对象指针都是相同大小的。函数指针不必与对象指针大小相同。@JonathanLeffler不正确。在旧Cray上,由于与现代GPU向量处理器没有什么不同的架构原因,寻址单个char
比寻址一个向量字需要更多的位。@MitchWheat该标准规定了您可以做什么,不一定是您不能做什么,或者哪些数量可能不相等。因此,对这个答案的反驳将需要引用,但这已经足够好了。@ McChice,C++,这是你能得到的最接近的:“指针类型的值表示是定义的实现。指针指向CV合格和CV不合格版本(3.9)布局兼容类型应具有相同的值表示和对齐要求(3.11)。“-通过省略任何更严格的要求,允许任何其他类型的古怪。一些奇怪的编译器-可能现在已经过时-架构使sizeof(char*)
大于sizeof(void*)
。有一种克雷(IIRC),其中最小的实际可寻址单元是马赫