数组的反转不起作用

时间:2016-05-07 19:22:39

标签: c algorithm reverse

这是我的主要内容:

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

我的函数调用没有副作用吗?怎么了?

2 个答案:

答案 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