指针指针的字节大小?

时间:2013-02-18 06:07:02

标签: c pointers

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

例如:

int *p;
int **q;

指针q的指针是什么?

2 个答案:

答案 0 :(得分:7)

标准不保证指针的大小相等。它只保证sizeof(char)等于1。

因此int *的大小不一定与float *的大小相同。

因此,要回答您的问题, int *的大小不能“保证”等于int ** 的大小。

但是在大​​多数编译器中int *的大小等于int **

的大小

以下是C99的一篇文章: 6.2.5.26

  

指向void的指针应具有相同的表示和对齐方式   要求作为指向字符类型的指针。(39)类似地,指针   合格或不合格版本的兼容类型应具备   相同的表示和对齐要求。所有指针   结构类型应具有相同的表示和对齐方式   彼此的要求。所有指向联合类型的指针都应该有   相同的表示和对齐要求彼此相同。   指向其他类型的指针不需要具有相同的表示或   对齐要求。

     

39)同样的表示和对齐要求   意味着可互换性作为函数的参数,返回值   职能和工会成员。

答案 1 :(得分:-2)

您没有准确说明您要问的语言版本。 C99 sez:

  

指向对象或不完整类型的指针可以转换为   指向不同对象或不完整类型的指针。如果结果   指针未正确对齐57)对于指向类型,   行为未定义。否则,当再次转换回来时,   结果应与原始指针进行比较。

见第6.3.2.3节

这有点保证所有指针肯定会像它们的大小相同。

嗯,不。正如potatoswatter指出的那样。转换能力不保证相同的尺寸。