[英]How can I reverse an array using pointers?
I'm trying to write a function which reverses an array. 我正在尝试编写一个反转数组的函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void * reverse(void * array, int length, size_t size) {
void * temp = malloc(size);
int s = 0; // start
int e = length - 1; // end
const int halp = length / 2;
for (; s < halp; s++) {
memcpy(temp, (array + s), size);
memcpy((array + (s * size)), (array + (e * size)), size);
memcpy((array + (e * size)), temp, size);
e--;
}
free(temp);
return array;
}
int main(int argc, char * argv[]) {
int array[] = {0, 1, 2, 3, 4};
for (int i = 0; i < 5; i++) {
printf("array[%d]: %d\n", i, array[i]);
}
printf("------------------------------------------\n");
reverse(array, 5, sizeof(int));
printf("------------------------------------------\n");
for (int i = 0; i < 5; i++) {
printf("array[%d]: %d\n", i, array[i]);
}
}
Result: 结果:
array[0]: 0
array[1]: 1
array[2]: 2
array[3]: 3
array[4]: 4
------------------------------------------
------------------------------------------
array[0]: 4
array[1]: 3
array[2]: 2
array[3]: 16777216
array[4]: 0
Why the result has an unexpected value? 为什么结果有意外值?
Change from 从
memcpy(temp, (array + s), size);
to 至
memcpy(temp, (array + s * size), size); // Note: s * size
Tested, and it works. 经过测试,并且有效。
Output: 输出:
array[0]: 0
array[1]: 1
array[2]: 2
array[3]: 3
array[4]: 4
------------------------------------------
------------------------------------------
array[0]: 4
array[1]: 3
array[2]: 2
array[3]: 1
array[4]: 0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.