我已经阅读了一些有关此类型声明的内容。 声明是:
int (*arr)[5];
我对这个类型声明有点困惑。实际上这个声明的含义是什么以及我们什么时候使用它。
int *arr[5]
arr
是 5 个指针的数组
int (*arr)[5]
arr
是指向 5 个整数元素的数组的指针
检查以下代码:
int a[5] = { 1,2,3,4,5};
int (*arr)[5] = &a;
printf("%d",(*arr)[2]);
现在可以像这样访问数组元素了
(*arr)[i]
不是*arr[i]
根据“声明先使用”规则:
(*arr)[i]
是 int
,其中 i < 5
,因此*arr
是一个 int[5]
,一个由五个整数组成的数组,因此arr
是一个 int (*)[5]
,指向包含五个整数的数组的指针。这意味着
arr
是一个指向 5 个整数数组的指针。 与不太令人困惑的五个指针数组进行比较:
int* arr[5];
这就是为什么你需要括号。