指针指针的字节大小是多少?它是否与常规指针的字节大小相同(在32位机器上通常为4,在64位机器上为8 - 虽然并非总是如此)?
例如:
int *p;
int **q;
指针q的指针是什么?
答案 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指出的那样。转换能力不保证相同的尺寸。