这就是我想我现在明白的:
int arr[][5]
- 表示 arr 是指向 5 个数字的数组的指针。 我未能实现以下内容:int arr2[5]; int arr[][5]=&arr2; ERROR: initializer fails to determine size of ‘arr’.
这就是我无法理解的:
- 我不知道
(*arr)[20]
中的()
是什么意思以及 arr 代表什么。
谢谢!
最佳答案
I have no idea what does () in (*arr)[20] means and what arr represents.
()
的优先级高于 []
,而 []
本身的优先级高于 *
。因此 ()
使 arr
成为一个指向数组的指针,否则它就变成了指针数组。
int (*arr)[20]; // pointer to array of 20 int
int *arr[20]; // array of 20 pointers to int
<小时/>
int arr[][5]=&arr2;
该分配无效。两个原因:
- 无法将数组分配给地址。当您在堆栈中声明数组时,它会在内存中分配一个固定位置。因此,数组的名称可以被认为是一个
const
指针 - 因为它是 const,所以不能被重新分配以指向任何其他地址。 - 此外,如果在定义时省略数组的大小,则必须为数组提供初始化 - 否则编译器如何知道数组的大小?
来自@BLUEPIXY - 你想要的是(必须首先将 arr
的定义修复为指针):
int arr2[5];
int (*arr)[5]=&arr2;
关于c - int (*arr)[20] 和 int arr[][7] 之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41292125/