C语言:写一函数,将一个3*3整形矩阵转置,我的代码有问题吗?

下面是我的代码,为什么运行出来后下面有几行乱码?(见图)#include <stdio.h>int main(){int change(int a[3][3]); int a[3][3]; int *p; int i,j,t=0; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); change(a); p=a; t=0;for(p=a;p<a+9;p++){ printf("%5d",*p); t++; if(t%3==0) printf("\n");}return 0;}int change(int a[3][3]){ int i,j,t; for(i=0;i<3;i++) for(j=0;j<3;j++) {t=a[i][j];a[i][j]=a[j][i];a[j][i];} return a;}

改错如下:
输出结果语句中
for(p=a;p<a+9;p++)应改为
for(p=a;p<a[0]+9;p++)//地址运算错误
转置语句中
for(i=0;i<3;i++)
for(j=i;j<3;j++) //这里逻辑错误
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;//这里没赋回去吧
}追问

啊,我脑子坏掉了
(°ー°〃)

追答

for(p=a;p<a[0]+9;p++)这里比较难,矩阵运算还是推荐用下标运算,不然比较费脑子。。。

追问

没办法,指针是作业要求呀
╮(︶﹏︶)╭

没办法,指针是作业要求呀
╮(︶﹏︶)╭

没办法,指针是作业要求呀
╮(︶﹏︶)╭

追答

只能彰显C语言指针有多么高深,没有多大实际意义的。。。

追问

对了为什么是a[0],不是a[0][0]?

追答

改成&a[0][0]也可以的。但a+1是&a[1][0],a+9是&a[9][0],越界得海了。。。

追问

en,我知道a是数组地址,但是数组和指针转换,地址与数有点搞不清,还是明天问老师吧,虽然他有点可怕,话说你哪人呐,竟然用“海了”这个方言,我以为只有我们这边用……

追答

郭德纲的段子听多了,哈哈。。。

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网