这是我的主要内容:
int main(){
int array[] = {1,2,3,4,5,6};
int i = 0;
reverse(array,6);
for(i=0; i < 6; i++)
printf("%d\n",array[i]);
}
这是我的反向功能:
void reverse(int * array,int n){
int i;
for(i=0; i < n; i++){
int tmp = array[i];
array[i] = array[n-i];
array[n-i] = tmp;
}
}
我不明白为什么我的输出与输入相同:
1 2 3 4 5 6
我的函数调用没有副作用吗?怎么了?
答案 0 :(得分:3)
你只需要在n / 2处停止循环,否则你将反转你的阵列(结束到n / 2)然后你再次反转它(从n / 2到n)
void reverse(int * array,int n){
int i;
for(i=0; i < n/2; i++){
int tmp = array[i];
array[i] = array[n-1-i];
array[n-1-i] = tmp;
}
}
此外,您需要使用n-1-i而不是n-i
答案 1 :(得分:0)
看到你应该做的一些改变。
void reverse(int * array,int n);
int main(){
int array[] = {1,2,3,4,5,6};
int i = 0;
reverse(array,6);
for(i=0; i < 6; i++)
printf("%d\n",array[i]);
}
void reverse(int array[],int n){
int i;
for(i=0; i <= ((n/2)-1); i++){
int tmp = array[i];
array[i] = array[n-i-1];
array[n-i-1] = tmp;
}
}
输出:
6 五 4 3 2 1