c - int (*arr)[20] 和 int arr[][7] 之间有什么区别

标签 c arrays pointers

这就是我想我现在明白的:

  1. int arr[][5] - 表示 arr 是指向 5 个数字的数组的指针。 我未能实现以下内容:

    int arr2[5];
    int arr[][5]=&arr2;
    ERROR:  initializer fails to determine size of ‘arr’.
    

这就是我无法理解的:

  1. 我不知道 (*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/

相关文章:

c - C:getopt无法识别选项。有人可以解释吗?

php - 将对象的对象转换为对象数组(PHP、Laravel)

javascript - 具有自定义浮点索引的二维数组式数据结构

arrays - 如何将嵌套数组转换为散列或 JSON 值作为数组

c - strcpy 和 printf 多维字符数组 C

c - 使用指向数组元素的指针比通过索引访问元素慢吗?

c - 我应该将 size_t 转换为 ptrdiff_t 吗?

c++ - 函数指针?

c - 为什么指向 16 位寄存器的指针是 uword?

C比较指针(带字符)