簡體   English   中英

復制1d元素2d數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM