c中函数中的多维数组

时间:2016-03-15 21:41:57

标签: c arrays

我有这个练习在C中进行矩阵的转置。我做了一个函数来检查类型n * n但是当我试图询问用户矩阵时我不知道应该如何声明数组。而且我在[n2]部分的函数中得到了这个编译错误“形式参数1的类型不完整”。

多维数组函数的参数不应该是这样的 - > int matrix [] [n2]。或者是因为我使用变量而不是常量或预定义的大小。 ?

#include <stdio.h>
#define prompt "Dimenção da matriz (nxn) >>"
#define prompt_1 "Introduza os valores : "

void getType( int *n1, int *n2 );
void getMatrix( int matrix[][n2], int lim1, int lim2);
//void trans(int matrix[][n2]);

int main(int argc, char const *argv[]) {
  int n1, n2;
  getType(&n1, &n2);
  int matrix[n1][n2];
  //printf("%dx%d\n", n1, n2);
  getMatrix(matrix, n1, n2);
  //trans(matrix);
  return 0;
}

void getType(int *n1, int *n2){
  printf("%s", prompt );
  scanf("%dx%d", &(*n1), &(*n2));
}

void getMatrix( int matrix[][n2], int lim1, int lim2){
  printf("%s\n", prompt_1 );
  for(int line  = 0; line < lim1; line++ ){
    for(int column = 0; column < lim2; column++){
      printf("Linha %d coluna %d ->", line, column );
      scanf("%d", &matrix[line][column]);
    }
  }
}

1 个答案:

答案 0 :(得分:1)

签名应为:

void getMatrix( int lim1, int lim2, int matrix[lim1][lim2] )

您可以省略方括号内的lim1,但包含它是一个很好的文档。

主要观点是方括号内的变量必须是参数列表中较早的参数,或者作用域中的其他变量(只能是全局变量,但这通常是个坏主意)。 / p>

检查scanf返回值也是一件好事,否则你可能会创建带有垃圾维度的矩阵。