在 2D 数组的情况下'&'运算符附加到数组名称时,指针算术有何不同?



对于下面的代码片段,表达式数组+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 数组",这可能没有意义。

相关内容

  • 没有找到相关文章

最新更新