C语言的一段程序

[复制链接]
查看11 | 回复1 | 2009-6-30 00:30:06 | 显示全部楼层 |阅读模式
最近学了"指向二维数组的指针",编了个小程序,用指针的方法对一个3X3的矩阵进行转置,程序如下:
main()
{
int a[3][3]={1,2,3,4,5,6,7,8,9};
int temp;
int i,j;
//分别代表矩阵的行和列
for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

printf("%5d",*(*(a+i)+j)); //打印原矩阵

printf("\n");

}
for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

{ temp=*(*(a+i)+j);
//行列互换

*(*(a+i)+j)=*(*(a+j)+i); //行列互换

*(*(a+j)+i)=temp;
//行列互换

}

}
printf("\n");
for(i=0;i<3;i++)

{

for(j=0;j<3;j++)

printf("%5d",*(*(a+i)+j)); //打印转置后的矩阵

printf("\n");

}
getch();
}
可是程序并没有输出转置后的矩阵,还是原来的矩阵,不知原因在哪,请高手不吝赐教,谢谢
先感谢一下.
我也想过这方法,但想不通的是,

temp=*(*(a+i)+j);
//行列互换

*(*(a+i)+j)=*(*(a+j)+i); //行列互换

*(*(a+j)+i)=temp;
//行列互换
此时,应该是第一行147,第二行258,第三行369,那么重新以同样顺序打印矩阵时,就应该是

1 4 7

2 5 8

3 6 9
但实际按同样顺序打印的还是

1 2 3

4 5 6

7 8 9
始终想不明白 @_@

回复

使用道具 举报

千问 | 2009-6-30 00:30:06 | 显示全部楼层
printf("%5d",*(*(a+i)+j)); //打印转置后的矩阵改为 printf("%5d",*(*(a+j)+i)); //打印转置后的矩阵for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{ temp=*(*(a+i)+j);
//行列互换
*(*(a+i)+j)=*(*(a+j)+i); //行列互换
*(*(a+j)+i)=temp;
//行列互换
}
}不要都可以...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行