#include <stdio.h>
void t4_trans(int array[3][3]);
int main(int argc, const char * argv[])
{
//T4
int array[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
t4_trans(array);
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 3; j ++)
{
printf("%5i", array[i][j]);
}
printf("\n");
}
return 0;
}
//T4
void t4_trans(int array[3][3])
{
for (int i = 0; i < 3; i ++)
{
for (int j = 0; j < 3; j ++)
{
int t = array[i][j];
array[i][j] = array[j][i];
array[j][i] = t;
}
}
}
我写了这段代码,我认为结果应该是:
1 4 7
2 5 8
3 6 9
然而,我得到了这样的输出:
1 2 3
4 5 6
7 8 9
我以为是因为函数t4_trans(...)创建了一个新数组,所以我试图添加
printf("%x", &array);
同时指向main()和t4_trans(...),但是我得到了相同的数组内存地址。
我不知道为什么代码不起作用,如果你知道,请帮助我。
BTW:我在我的MBA上使用xCode 5.1.1,10.9.4
感谢。
答案 0 :(得分:2)
问题是你的代码有效,但是#34;太好&#34; - 您实际上将矩阵转换两次,为您提供原始矩阵。这是因为您遍历所有元素,例如,当您交换array[0][1]
和array[1][0]
时,稍后的迭代将交换array[1][0]
和{{1} ,撤消第一次交换。
相反,您只需要在矩阵的一半处开始交换:
array[0][1]
基本上,这只交换了上面的三角形&#34;与较低的一个。它也会跳过主对角线,因为它不会受到换位的影响。