我的其余代码是正确的我相信但只是转置部分是错误的。
这里是转置部分的代码:
void transpose(int *m1, int *m2, int n) {
int i = 0;
int j = 0;
while(i=0, i<n) {
while(j=0, j<n) {
*(m1+i*n+j) = *(m2+j*n+i);
j++;
}
i++;
}
}
以下是结果:
M1=
8 1 6
3 5 7 //Original Matrix
4 9 2
M1'=
8 3 4
0 0 0 //Transpose matrix
0 0-71503482
有谁知道我哪里出错了?
答案 0 :(得分:1)
这是错误的:
while(i=0, i<n)
应该是:
for(i=0; i<n;)
当然,你也可以在那里移动i++
和声明:
for(int i=0; i<n; i++)
答案 1 :(得分:1)
我想详细说明约翰的答案,因为它不清楚 你是否理解这段代码的真正含义:
while(i=0, i<n)
您正在使用comma operator。
我想引用维基百科:
[...]逗号运算符(由标记表示)是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(并键入)
i=0, i<n
将i
设置为0,然后比较i<n
并返回此评估作为结果。
因为n
是3,所以条件被评估为真,程序进入
环。但是,每次必须评估while
循环的条件时,
i = 0, i<n
已执行,因此始终先将i
设置为0。其实你
创造了一个无限循环。