2d阵列反向

时间:2012-08-19 17:24:51

标签: c arrays function loops reverse

我正在尝试反转2d数组并且编译器工作正常,但是数组仍然与正在进行重新编译...

我在调用反向函数之前打印数组但之后似乎没有发生任何变化。
为什么?

以下是代码:

#include<stdio.h>

void reverse(int table[ ][5]){
    int a,b,c,d;
    int temp = 0;
    for(a=0,c=3;a<=3;a++,c--){
        for(b=0,d=4;b<=4;b++,d--){
            temp = table[a][b];
            table[a][b]= table[c][d];
            table[c][d]= temp;      
        }
      }

    }

int main(int argc,char *argv[]){
    int i,j;
    int table[4][5];

    for(i=0;i<=3;i++){
       for(j=0;j<=4;j++){
          scanf("%d",&table[i][j]);
       }
    }

    for(i=0;i<=3;i++){
        for(j=0;j<=4;j++){
            printf(" %d",table[i][j]);
        }
    }
    printf("\n");

    reverse (table);


    for(i=0;i<=3;i++){
       for(j=0;j<=4;j++){
           printf("%d ",table[i][j]);
       }
    }

    return 0; 
    }

你能在反向函数中找到问题吗?

2 个答案:

答案 0 :(得分:3)

问题是你正在交换元素,然后将它们交换回去。

答案 1 :(得分:1)

在您的反向功能中,您正在交换矩阵。当循环到达中途时,2-d阵列完全交换。但是你从一半到完全迭代,它再次被交换,使它与原始相同。

您需要更新类似

的循环
for(a=0,c=3;a<=(3/2)+1;a++,c--){
    for(b=0,d=4;b<=4/2;b++,d--){
-------------------^

注意:您需要适当地照顾奇数长度,因为3/2会给您1,但您需要2