对于下面的代码片段,表达式数组+1和&array+1返回的右值类型是什么?
int main()
{
int array[2][3];
printf("%p %p ", array+1, &array+1);
return 0;
}
我已经通过下面的链接,但我的疑问仍未消除。
2D 数组变量指针混淆
- 在表达式中使用
array
时,它会"衰减"到第一个元素的指针。 - 2D 数组
int[2][3]
的第一个元素是 1D 数组int[3]
。 - 因此,表达式
array+1
提供指向此类 1D 数组的指针。 - 表达式
array+1
的类型为int(*)[3]
,一个指向 3 个整数数组的数组指针。 - 当你在任何指针上
+ 1
时,指针算法被调用,你会得到"加一个指向的对象",而不是"加一个字节/地址"。 - 因此,
array+1
给出了 2D 数组中第二个类型int[3]
的数组。
-
&array
不同,它提供了一个指向数组本身地址的指针。指向 2D 数组的指针,键入int(*)[2][3]
。 - 如果你这样做
&array + 1
那么你会对 2D 数组的对象进行指针算术,并最终指向"分配的数组之外的一个 2D 数组",这可能没有意义。