0

p在给定语句中 初始化指针时

int a[10], *p;
p = &a[0];

我怀疑是的类型&a[0]还是pointer to intint
读完这篇文章后,我感到困惑:

作为a指向数组中第一个元素的指针,我们可以修改 a[0]: *a = 7;

注意:我有兴趣知道&a[0].

4

4 回答 4

2

&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是该元素的左值。左值可用于赋值的左侧,以分配给它所引用的对象。

于 2013-08-02T18:12:03.107 回答
1

&是地址运算符,所以&a[0]是数组的第一个元素的地址a,所以它是一个int *。由于[]具有比您更高的优先级*,因此可以如下阅读:

&(a[0])

这可能更清楚。你有的情况:

p = a ;

对衰减到指针的数组起作用。

于 2013-08-02T18:03:31.807 回答
1

由于历史原因

 p = a; 

p = &a[0] 

是等价的。请注意

auto q = &a; 

也是合法的,但 q 的类型不是 int* 而是 int[10] *。这可能不是你想要的。

于 2013-08-02T18:04:12.053 回答
0

的地址a[0]是指向整数的类型指针。您可以修改数组的第一个元素,因为*a相当于*(a + 0)which is nothing but a[0]

于 2013-08-02T18:02:29.773 回答