通过C中的指针转置矩阵

时间:2015-07-04 22:01:22

标签: c pointers matrix

我正在尝试在C中转置矩阵,同时将矩阵传递给函数并返回指向转置矩阵的指针。我在第二次循环中做错了什么?

中的

ptr = (float *) getMatrix(numRowsB, numColsB);
transposePtr = transpose(ptr, numRowsB, numColsB);
printf("\nBtranspose =\n");
printMatrix(transposePtr, numColsB, numRowsB);

创建矩阵

float* getMatrix(int n, int m)
{
  int i, j;
  float *arrayPtr;

  if ((n <= 0) || (m <= 0))
  {
    printf("function getMatrix(): matrix dimensions are invalid\n");
    return NULL;
  }
  arrayPtr = (float *) malloc(n*m*sizeof(float));
  if(arrayPtr == NULL)
  {
    printf("function getMatrix: Unable to malloc array\n");
    return NULL;
  }

转置功能

float* transpose(float *matrix, int n, int m)
{
    int i = 0;
    int j = 0;
    float num;
    float *transposed=(int*) malloc(sizeof(int)*n*m);
        while(i < n-1)
        {
            while(j < m-1)
            {
                num = *(matrix+i*m+j);
                *(transposed+j*m+i)= num;
                j++;
            }
            i++;
        }

    return transposed;
}

print fucntion

 void print(float *matrix, int n, int m)
{
   int i = 0;//row counter
   int j = 0;//col counter
   for(i = 0; i < n; i++){
     printf("\n");
     for(j = 0; j < m; j++){
       printf("%f ", *(matrix + i*n + j));
     }
   }
}

示例输入:

1  2  3

4  5  6

输出:

 1.000000 0.000000

 2.000000 3396.580087

-0.000000 0.000000

1 个答案:

答案 0 :(得分:1)

部分问题是你的打印功能

以下是适用的功能版本:

/source
  /activity
  /adapter
  /fragment
  /helper
  /model
  /persistence
  /widget

有一些事情。

  1. 使用float* transpose(float *matrix, int n, int m) { int i = 0; int j = 0; float num; float *transposed=malloc(sizeof(float)*n*m); while(i < n) { j = 0; while(j < m) { num = *(matrix + i*m + j); *(transposed + i+n*j) = num; // I changed how you index the transpose j++; } i++; } return transposed; } void print(float *matrix, int n, int m) { int i = 0;//row counter int j = 0;//col counter for(i = 0; i < n; i++){ printf("\n"); for(j = 0; j < m; j++){ printf("%f ", *(matrix + i*m + j)); // Changed from n to m } } } 代替sizeof(float)

  2. 您的循环应该是sizeof(int)i < n而不是j < mi < n-1,最后您需要每次将j < m-1重置为零/ p>

  3. 转置函数内部循环中的矩阵索引不正确

  4. 您的打印功能在乘法中使用了错误的变量

  5. 此外,它通常被视为bad practice to cast the result of malloc in C