[英]copy 1d element 2d array
我有一個2d數組,需要將一個1d元素復制到一個數組中。 我嘗試在以下示例中重復我的問題。 但下面的示例甚至無法編譯, gcc
抱怨
下標值既不是數組也不是指針
在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;
}
EDIT1:
我錯誤地沒有聲明int** TwoDArray
作為指向指針的指針-更改此值后,它現在可以完美編譯,但是我的結果值為0
,我希望它是99
為什么這樣做?
在您的代碼中, TwoDArray
是一個指針, TwoDArray
是一個指向int
指針。
因此,內存分配應類似於
TwoDArray = calloc(10,sizeof(*TwoDArray)); //i.e., sizeof(int)
代替
TwoDArray = calloc(10,sizeof(int*));
而TwoDArray[i]
的類型為int
,則不需要任何malloc
-ation。
因此,只要i
在范圍之內,就可以使用TwoDArray[i]
。
TwoDArray[9][99]
無效,因為TwoDArray[9]
始終不是指針。
相關,要使用數組下標運算符,
postfix-expression [ expression ]
其中一個表達式的類型應為“完成對象類型的指針”,另一個表達式的類型應為整數,結果的類型為“ 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]
現在本身就是您感興趣的指針,而不是該指針的地址 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.