如何使用指针算法将值从一个数组复制到另一个数组
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);
}
我正在尝试使用严格的指针算法将值从一个数组复制到另一个数组。这是我现在拥有的代码:
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);
}