2016-02-03 70 views
0

我只是試圖打印這個矩陣,說實話,我不知道爲什麼我得到一定的編譯器errors.I我得到「正式的參數不完整」和兩個中號和N個未聲明的錯誤。初學者ç代碼 - 麻煩二維數組

int print_matrix(int*[][]); 

int main() 
{ 
    int N = rand() % 10; 
    int M= rand() % 10; 
    int matrix[N][M]; 
    int n; 
    int m; 

    for (n=0; n<N; n++) 
    { 
    for (m=0; m<M; m++) 
    { 
     matrix[N][M]= rand()%20 +(-10); 
    } 
    } 
    print_matrix(&matrix); 

    return 0; 
} 

int print_matrix(int *matrix[N][M]) 
{ 
    int m; 
    int n; 

    for (n=0; n<N; n++) 
    { 
    for (m=0; m<M; m++) 
    { 
     printf("%2d", matrix[n][m]); 
    } 
    } 

    return 0; 
} 
+3

您不需要傳遞數組的地址,數組名稱已經是地址。 –

+2

請妥善縮進代碼。 – Idos

+0

你想INTS的矩陣或指針到整數矩陣? – m0skit0

回答

5

你在你的代碼中的一些錯誤,最重要的是,你並不需要傳遞數組的地址,如果你這樣做,你應該在print_matrix()功能正確處理它。

下面的代碼解決所有問題

#include <stdlib.h> 
#include <stdio.h> 

#define SIZE 10 
int print_matrix(int N, int M, int matrix[N][M]); 

int 
main(void) 
{ 
    int N = rand() % SIZE; 
    int M = rand() % SIZE; 
    int matrix[N][M]; 
    int n; 
    int m; 

    for (n = 0 ; n < N ; n++) 
    { 
     for (m = 0 ; m < M ; m++) 
      matrix[n][m]= rand() % 20 + (-10); 
    } 
    print_matrix(N, M, matrix); 
    return 0; 
} 

int 
print_matrix(int N, int M, int matrix[N][M]) 
{ 
    int m; 
    int n; 
    for (n = 0 ; n < N ; n++) 
    { 
     for (m = 0 ; m < M ; m++) 
      printf("%5d ", matrix[n][m]); 
     fputc('\n', stdout); 
    } 
    return 0; 
} 

我現在解釋一下我固定

  1. 合格行數和列數print_matrix()
  2. 你有另一個錯誤時分配矩陣元素中,使用大寫NM,因此你總是訪問之後的最後一個陣列中的元素。
  3. 取出&*從函數調用,它分別是defenition,當它是一個函數的參數數組被自動轉換爲指針,嘗試sizeof(matrix),你可以驗證它是同sizeof(void *)

你可以做到這一點

int 
print_matrix(int N, int M, int matrix[N][M]) 

,因爲你也可以做到這一點

int N = rand() % SIZE; 
int M = rand() % SIZE; 
int matrix[N][M]; 

,反之亦然。

+0

非常感謝!這在使用和我的書,但是理解指針,所以我想用他們的練習。你知道怎麼做嗎? – drt

+0

當然我知道。但爲什麼你的書沒有幫助? –