首页 > 解决方案 > 为什么 *ptr 在 printf 中?

问题描述

在下面的代码中,(*ptr)[1]不应该(ptr)[1]改为吗?Asptr也是一个指针aa[][]

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

标签: c++carrayspointers

解决方案


不。

  • a是一个数组数组。

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

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

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

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

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

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

该声明也很狡猾。初始化程序在技术上是有效的,但并没有按照你的想法做,因为它似乎只列出了一个维度。

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


推荐阅读