簡體   English   中英

C函數中的多維數組

[英]Multidimensional arrays in functions in c

我進行了此練習,以在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]);
    }
  }
}

簽名應為:

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

您可以省略方括號內的lim1,但包括它是一個很好的文檔。

要點是,方括號內的變量必須是參數列表中較早版本的參數,或者是范圍內的其他變量(只能是全局變量,但這通常是個壞主意)。

另外,檢查scanf返回值也將是一件好事,否則您可能會創建具有垃圾尺寸的矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM