Как я могу передать матрицу из подпрограммы в main ()? - PullRequest
0 голосов
/ 28 апреля 2020

В приведенном ниже коде есть подпрограмма с прототипом 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];  
  }
}

1 Ответ

1 голос
/ 28 апреля 2020

Массивы распадаются на указатели на их первый элемент.

Если у вас есть простой массив, такой как

float simple_array[SIZE];

, то он будет распадаться (как &simple_array[0]) до типа float * .

Если каждый элемент в массиве, в свою очередь, является массивом, то затухание происходит только для первого уровня, и вы все равно получаете указатель на первый элемент «внешнего» массива. Это будет указатель на массив.

Таким образом, для массива, подобного

float A[n][m];

, он будет уменьшаться (все еще используя &A[0]) до типа float (*)[m].

Помня, что вам нужно передать размеры массива в функции, объявление transposed_matrix может выглядеть так:

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