下面是我的代码,为什么运行出来后下面有几行乱码?(见图)#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是数组地址,但是数组和指针转换,地址与数有点搞不清,还是明天问老师吧,虽然他有点可怕,话说你哪人呐,竟然用“海了”这个方言,我以为只有我们这边用……
追答郭德纲的段子听多了,哈哈。。。