首页 > 解决方案 > 如何将矩阵从子程序传递到 main()?

问题描述

在下面的代码中,有一个带有原型的子程序float transposed_matrix(int n, int m, float (*a)[m]);,我试图通过它将其结果传递给主程序:转置矩阵。这样我就可以从main(). 有人可以帮我完成代码吗?非常感谢你!:-)

#include <stdio.h>

#define R 2
#define C 3

float transposed_matrix(int n, int m, float (*a)[m]);

int main(void)
{
  int n=2,m=3;
  int i,j;
  float A[n][m],&transposed_matrix[i][j];

  puts("Enter the values of the matrix:");
  for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
      printf("A[%d][%d]=",i,j);
      scanf("%f",&A[i][j]);
    }

  puts("\nThe transposed matrix is:");
  transposed_matrix(n, m, A[R][C], &transposed_matrix[i][j])

  for(i=0;i<R;i++)
  {
    for(j=0;j<C;j++)
      printf("%6.2f",transposed_matrix[i][j]);  
    printf("\n");
  }

  return 0;
}


float transposed_matrix(int n, int m, float A[R][C], float (*b)[m])
{
  int i,j;
  for(i=0;i<C;i++)
  {
    for(j=0;j<R;j++)
       (*b)[m]=A[j][i];  
  }
}

标签: cmatrixtranspose

解决方案


数组衰减为指向其第一个元素的指针。

如果您有一个简单的数组,例如

float simple_array[SIZE];

然后它会衰减(as &simple_array[0])到 type float *

如果数组中的每个元素又是一个数组,那么衰减只发生在第一级,你仍然会得到一个指向“外部”数组的第一个元素的指针。这将是一个指向数组的指针。

所以对于像这样的数组

float A[n][m];

然后它将衰减(仍在使用&A[0])类型float (*)[m]

请记住,您需要将数组的大小传递给函数,transposed_matrix声明可能如下所示:

float transposed_matrix(int n, int m, float (*a)[m]);

推荐阅读