gpt4 book ai didi

复制一维元素二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:04 24 4
gpt4 key购买 nike

我有一个二维数组,需要将一个一维元素复制到一个数组中。我试图在下面的示例中复制我的问题。但是下面的例子甚至没有编译,gcc 提示

subscripted value is neither array nor pointer`

TwoDArray[9][99] = 99; 行,这是为什么呢?我不太明白,任何帮助将不胜感激!

int main(void)
{
int i = 0;
int* TwoDArray;
int DestArr[100] = {0};

TwoDArray = calloc(10,sizeof(int*));
for (i = 0; i < 10; i++)
TwoDArray[i] = calloc(100,sizeof(int));

TwoDArray[9][99] = 99;

memcpy(DestArr, &TwoDArray[9],sizeof(int)*100);
printf("DestArr[99] %d\n",DestArr[99]);


return 0;
}

编辑 1:

我错误地没有将 int** TwoDArray 声明为指向指针的指针 - 更改后,它现在可以完美编译,但我的结果中的值为 0 并且我我希望它是 99 - 为什么会这样?

最佳答案

在您的代码中,TwoDArray 是一个指针,指向 int 的指针。

所以,内存分配应该是这样的

 TwoDArray = calloc(10,sizeof(*TwoDArray));  //i.e., sizeof(int)

代替

TwoDArray = calloc(10,sizeof(int*));

TwoDArray[i]int 类型,不需要任何 malloc-ation,无论如何。

因此,您可以使用 TwoDArray[i],前提是 i 在范围内。

TwoDArray[9][99] 无效,因为 TwoDArray[9] 无论如何都不是指针。

相关,要用到数组下标运算符,

postfix-expression [ expression ]

One of the expressions shall have type ‘‘pointer to complete object type’’, the other expression shall have integer type, and the result has type ‘‘type’’.

TwoDArray[9][99] 的情况下,TwoDArray[9] 当然不是指向完整对象类型的指针。


编辑:

如果你使用

 int** TwoDArray;

 TwoDArray[i] = calloc(100,sizeof(int));

那么,你需要改变

memcpy(DestArr, &TwoDArray[9],sizeof(int)*100);

memcpy(DestArr, TwoDArray[9],sizeof(int)*100);
^^

因为 TwoDArray[9] 本身 现在是您感兴趣的指针,而不是指针的地址

关于复制一维元素二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34663666/

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