簡體   English   中英

如何使用指針算法在C中將值從一個數組復制到另一個數組

[英]How to copy values from one array to another in C with pointer arithmetic

我正在嘗試使用嚴格的指針算法將值從一個數組復制到另一個數組。 這是我現在擁有的代碼:

   int *p;
   int arraySize = 20;

   int array[arraySize];     

   for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){
        int random = rand() % 200;
        *p = random;
   }

   for (p = array; p< array+(sizeof(array)/sizeof(int)); p++){
        printf("%d\t%x\n", *p, p);
   }

   //the code above works fine

   printf("\n");

   //grow the new array by one to insert value at end later
   int array2[(arraySize+1)];

   int *p2;

   for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){
       *(p2) = *(p);
   }

   for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){
       printf("%d\t%x\n", *p2, p2);
   }

但是,當我運行代碼時,在每個內存位置輸出的所有內容均為0。 我做錯了什么,導致無法復制值?

您的問題出在從*p復制到*p2循環中:

for(p2 = array2; p2< array2+(sizeof(array2)/sizeof(int)); p2++){
    *(p2) = *(p);
}

您增加p2但不會增加p ,也不會重置p使其指向array的開頭。 在此循環的開始, p指向array末尾的位置。 將您的循環更改為此:

for(p2 = array2, p = array; p2 < array2 + (sizeof(array2)/sizeof(int)) - 1; p2++, ++p){
    *(p2) = *(p);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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