C 二维阵列反转

C 二维阵列反转,c,arrays,function,loops,reverse,C,Arrays,Function,Loops,Reverse,我正在尝试反转2d数组,编译器工作正常,但数组仍与Begging相同 我在调用反向函数之前和之后打印数组,但似乎没有发生任何更改。 为什么? 代码如下: #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--){

我正在尝试反转2d数组,编译器工作正常,但数组仍与Begging相同

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

代码如下:

#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; 
    }
#包括
无效反向(整数表[][5]){
INTA、b、c、d;
内部温度=0;

对于(a=0,c=3;a问题是交换元素,然后再交换回来。

问题是交换元素,然后再交换回来。

在反向函数中,交换矩阵。当循环到达一半时,二维数组完全交换。但从一半到完全迭代,它得到交换再次ped,使其与原始版本相同

你需要更新你的循环,比如

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

for(a=0,c=3;a在反向函数中,您正在交换矩阵。当循环达到一半时,二维数组将完全交换。但您从一半迭代到完全,它将再次交换,使其与原始数组相同

你需要更新你的循环,比如

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

对于(a=0,c=3;a您交换了多少次
表[3][4]
?计算它们。您交换了多少次
表[3][4]
?数一数。+1@rain如果这导致segfault,你应该在你的问题中提到它。至于你的代码不起作用的原因,这个答案说得对:你将每对元素交换两次。很容易看出你是否只计算了所有的交换。@AdamZalcman,是什么导致了segmentation fault(我想)是否将
reverse(int table[][5])
更改为
reverse(int**table)
@eq:实际上这导致了seg故障!@rain…,这怎么会导致当前形式的segfault?@eq:我猜是因为表本身是int*ant,如果你把另一个表改为int***……但如果你像表[][5]那样编写它的话它的意思是int**+1@rain如果这导致了segfault,你应该在你的问题中提到它。至于你的代码不起作用的原因,这个答案是正确的:你将每对元素交换两次。很容易看出你是否只计算了所有的交换。@AdamZalcman,是什么导致了segmentation fault(我想)是否将
reverse(int table[][5])
更改为
reverse(int**table)
@eq:实际上这导致了seg故障!@rain…,这怎么会导致当前形式的segfault?@eq:我猜是因为表本身是int*ant,如果你把另一个表改为int***……但如果你像表[][5]那样编写它的话它的意思是int**