数组的反转不起作用
Reverse of an array doesn't works
这是我的主要内容:
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
我的函数调用没有副作用吗?怎么了?
您只需要在 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
看到有一些您应该做的改变。
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
5个
4个
3个
2个
1
这是我的主要内容:
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
我的函数调用没有副作用吗?怎么了?
您只需要在 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
看到有一些您应该做的改变。
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 5个 4个 3个 2个 1