gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:15:19 25 4
gpt4 key购买 nike

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

  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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com