尝试使用指针在C中转置矩阵

时间:2018-01-27 04:19:08

标签: c pointers matrix

我的其余代码是正确的我相信但只是转置部分是错误的。

这里是转置部分的代码:

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

有谁知道我哪里出错了?

2 个答案:

答案 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

我想引用维基百科:

  

Wikipedia: Comma operator

     

[...]逗号运算符(由标记表示)是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(并键入)

i=0, i<n

i设置为0,然后比较i<n并返回此评估作为结果。 因为n是3,所以条件被评估为真,程序进入 环。但是,每次必须评估while循环的条件时, i = 0, i<n已执行,因此始终先将i设置为0。其实你 创造了一个无限循环。