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