数组的反转不起作用

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