p
在给定语句中 初始化指针时
int a[10], *p;
p = &a[0];
我怀疑是的类型&a[0]
还是pointer to int
它int
?
读完这篇文章后,我感到困惑:
作为
a
指向数组中第一个元素的指针,我们可以修改 a[0]:*a = 7;
。
注意:我有兴趣知道&a[0]
.
&a[0]
是指向 的指针int
。以下是对此的解释步骤:
&a[0]
被解析为&(a[0])
因为下标操作符[]
比地址操作符绑定得更紧密&
。a
是一个数组,但在这种情况下它会自动转换为指向其第一个元素的指针。(如果它是 , 或 的操作数,或者是用于初始化数组的字符串文字,则不会被sizeof
转换_Alignof
。&
)a[0]
获取指针并成为第一个元素(元素 0)的左值。&(a[0])
是指向 的指针a[0]
。既然我们知道a[0]
是一个int
,指向的指针a[0]
就是一个指向的指针int
。然后p
被赋值为&a[0]
。因此,p
是指向 的第一个元素的指针a
。
由于p
是指向 的第一个元素的指针a
,*p
是该元素的左值。左值可用于赋值的左侧,以分配给它所引用的对象。
由于历史原因
p = a;
和
p = &a[0]
是等价的。请注意
auto q = &a;
也是合法的,但 q 的类型不是 int* 而是 int[10] *。这可能不是你想要的。
的地址a[0]
是指向整数的类型指针。您可以修改数组的第一个元素,因为*a
相当于*(a + 0)
which is nothing but a[0]
。