0

What is the byte size of a pointer to pointer? Is it the same as the byte size of a regular pointer(typically 4 on a 32bit machine, 8 on a 64bit machine - although not always)?

For example:

int *p;
int **q;

what would the pointer to pointer q be?

4

2 回答 2

7

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

因此 的大小int *不必与 的大小相同float *

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

但在大多数编译器上,大小int *等于int **

这是 C99 中的一段:6.2.5.26

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

39) 相同的表示和对齐要求意味着作为函数的参数、函数的返回值和联合成员的可互换性。

于 2013-02-18T06:12:43.040 回答
-2

您没有具体说明您要询问的语言版本。C99 规格:

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

在第 6.3.2.3 节中

这有点保证所有指针肯定会像它们一样大小。

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

于 2013-02-18T06:21:52.943 回答