我似乎无法解决教授给我的这个练习。所以我想在本练习中使用指针来反转原始数组的顺序。
这是我到目前为止所做的。
#include <stdio.h>
#define SIZE 10
void reverse(int *a, int size);
int main(void){
int array[SIZE]={1,2,3,4,5,6,7,8,9,10};
int i;
printf("The original order is:\n");
for (i=0; i<SIZE; i++){
printf("%5d", array[i]);
}
reverse(array, SIZE);
printf("\nThe reverse order is:\n");
for (i=0; i<SIZE; i++){
printf("%5d", array[i]);
}
return 0;
}
void reverse(int *a, int size){
int j;
int hold;
for(j=0; j<size-1; j++){
hold = a[j];
a[j] = a[size-1-j];
a[size-1-j] = hold;
}
}
答案 0 :(得分:1)
在reverse
函数中,您确实交换了值,但是又将它们交换回来了!
试试这个:
void reverse(int *a, int size){
int j;
int hold;
for(j=0; j<size/2; j++){
hold = a[j];
a[j] = a[size-1-j];
a[size-1-j] = hold;
}
}
答案 1 :(得分:0)
从0..N运行算法会将第一个元素0与N交换,然后将元素N与元素0交换。要修复它,请使用
for (j=0; j<size/2; j++)