为什么printf中的*ptr?

xeh*_*hob 1 c c++ arrays pointers

在下面的代码,如果(*ptr)[1]不是(ptr)[1]呢?由于ptr也作为指针aa[][].

int a[][3] = {1, 2, 3, 4, 5, 6};
int (*ptr)[3] = a;
printf("%d", (*ptr)[1]);
Run Code Online (Sandbox Code Playgroud)

Lig*_*ica 5

没有.

  • a 是一个数组数组.

  • ptr 是指向该数组数组的[第一个元素]的指针.

  • *ptr 是该数组的第一个元素(它本身就是一个数组!).

    • 这也可以写ptr[0](因为*(a+n)a[n]).
  • (*ptr)[1] 是该结果中的第一个元素.

    • 这也可以写ptr[0][1].

    • 它会更清楚地写成a[0][1].

你提出的反例ptr[1]是结果中的下一个元素,仍然是一个数组.

那个宣言也很狡猾; 初始化程序在技术上是有效的,但不会按照您的想法执行,因为它似乎只列出单个维度.

总的来说,这不是很好的代码.