【发布时间】:2012-10-10 16:54:19
【问题描述】:
可能重复:
C: How come an array’s address is equal to its value?
C pointer : array variable
考虑一个多维数组:
int c[1][1];
为什么下面所有的表达式都指向同一个地址??
printf("%x", (int *) c); // 0x00000500
printf("%x", *c); // 0x00000500
printf("%x", c); // 0x00000500
指针的实际值和取消引用的值如何相同?
【问题讨论】:
-
您实际上并没有使用 *c 取消引用指针,要取消引用它,您需要使用
*c[0]。您可以通过初始化为零并尝试两个“取消引用”来测试它。 -
@YoussefG。数组衰减为指向数组第一个元素的指针,因此表达式中的
c最终指向第一个元素,而*c取消引用该值 -
@Jason 我了解数组是什么,但在二维数组中 *c 不会给你第一个值,因为它只会取消引用 1 个地址:指向一个字符的指针,他是获取第二个指针的地址,恰好与第一个指针的地址相同。尝试一个快速程序,您会看到 *c 将评估为一个地址,但
**c将评估为零(如果您初始化为零)。 -
@YoussefG.对不起,我想我们说的是完全相同的事情......因为这是一个二维数组,
*c取消引用另一个数组。所以c的第一个元素是一个数组,通过延迟c你将返回该数组,但它也必须衰减到指向其第一个元素的指针,即实际的int元素。我在一般意义上使用“值”,无论该类型是什么,无论是数组等,而不是int的值中的“值”。
标签: c pointers multidimensional-array