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]。