我这个到底错哪了? C语言 “ 将一个3×3的矩阵转置,用一函数实现之。 ” 他就是不对调啊……

# include<stdio.h>
void main()
{
int i,j,a[3][3];
void exchange(int a,int b);
printf("Please input the numbers in the book:\n");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("before exchange:\n\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("\t%d",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;j<=i;j++)
exchange(a[j][i],a[i][j]);
printf("after exchange:\n\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("\t%d",a[i][j]);
printf("\n");
}
}
void exchange(int a,int b)
{
int t;
t=a;
a=b;
b=t;
}

你要明白一点,子函数中改变了,调用它的地方的参数是不会改变的,
也就是说,子函数中的参数会另外开辟一块内存来保存这个数据,那么这个新开辟的内存中的数据改变了,原来的参数内存地址中的数据还是没有改变,指针也是不会改变的
指针能交换,道理是指针没有变,而指针指向的空间的数据改变了,所以貌似改变了

解决的办法有很多种,
一个是a定义为全局变量,这个很好理解,
一个是子函数的参数用指针,这个有经典案例,也很好写,很好理解
一个是申请公用内存,也就是说实参和形参用一个内存,不新开辟内存,用&,估计应该也有介绍追问

哦,明白了,谢谢提醒!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-31
没细看,你把:void exchange(int a,int b)改成
void exchange(int &a,int &b)
再试试看追问

哦?那还属于C语言了么?

追答

别名"引用"传递,就不会像你那样,函数一结束, 局部变量就被销毁了

相似回答
大家正在搜