C 指向指针的指针的字节大小?

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的指针应具有相

指向指针的指针的字节大小是多少?它是否与常规指针的字节大小相同(在32位机器上通常为4,在64位机器上为8,但并不总是如此)

例如:

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),其中最小的实际可寻址单元是马赫