gpt4 book ai didi

c - 用 calloc 分配的多维数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:45:01 26 4
gpt4 key购买 nike

我有以下二维数组 N*2(我不能修改它的声明):

bool* myArray[2];
int N;

我想用 calloc 分配它但没有成功:

myArray = calloc(N, 2*sizeof(bool));
for (int i=0; i!=N; i++)
{
myArray[i] = calloc(2, sizeof(bool));
}

编译器提出我(在第一个 calloc 上):

error: incompatible types in assignment of 'void*' to 'bool* [2]'

我做错了什么?

最佳答案

这段代码:

bool* myArray[2];
int N;

声明的不是二维数组,而是指针数组。这是一个重要的区别,因为二维数组不是指向数组的指针的数组——它们只是连续存储,就像一维数组一样(一个“行”接一个“行”)。

因此,正如您声明不能更改声明一样,让我们​​来解释一下指针数组需要什么。通过您的声明,您正好声明了 2 个指针,因此 N 只能表示“第二维”,如这些指针指向的数组中的元素数。通过此声明,您可以拥有 2 倍的 N bool 值数组。分配它们看起来像这样:

myArray[0] = calloc(N, sizeof(bool));
myArray[1] = calloc(N, sizeof(bool));

myArray 本身不需要分配空间,通过你的声明,它已经有自动存储。

关于c - 用 calloc 分配的多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44721170/

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