我正在尝试反转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;
}
你能在反向函数中找到问题吗?
答案 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
。