如何使用指针算法将值从一个数组复制到另一个数组

时间:2017-05-08 17:10:13

标签: c arrays pointers 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。我做错了什么阻止了值的复制?

1 个答案:

答案 0 :(得分:1)

您的问题出现在这个循环中,您要从*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);
}