2016-11-28 80 views
1

例如,我有兩個功能:第一個從主得到的高度和寬度(),並讀取二維int數組傳2D int數組到另一個在C

int read_price (int height, int width) { 
    int i, j; 
    int array[height][width]; 

    printf("Enter your values:\n"); 

    for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     scanf("%d", &array[i][j]); 
    } 
    } 
} 

第二函數從得到的值先打印一下。

void print_array() { 
    int i, j; 
    for (i = 0; i < h; i++) { 
    for (j = 0; j < w; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
    } 
} 

而且 - 問題!我應該如何在第一個函數中調用第二個函數(使用哪個參數)?我應該在第二個函數的名字中寫出哪些參數。

我試圖調用這個(和另一個)方式,但我得到錯誤。

print_array (array[height][width]); 

回答

4

在C99可以使用陣列具有可變長度。在你的情況下,功能print_array的定義將看起來像:

void print_array (int height, int width, int array[height][width]) { 
    int i, j; 
    for (i = 0; i < height; i++) { 
    for (j = 0; j < width; j++) { 
     printf("%d ", array[i][j]); 
    } 
    printf("\n"); 
    } 
} 

,你會稱呼其爲:因爲在C你是不是送數組,只是指針

print_array(height, width, array); 

,以前的定義是等於一個定義當發送指針(至width整數數組),其可以定義爲:

void print_array (int height, int width, int (*array)[width]) { 
    ... 
} 
+0

好的,但是應該怎麼通過ARGS從第一功能? 'print_array(height,width,array [] []);'? 它引發錯誤 –

+0

我編輯了答案並添加了調用 – Marian

+0

這似乎是最後一個問題。我編輯它,就像它在你的答案中,但首先我同樣得到錯誤。然後我試着用gcc在終端中編譯它,但是作爲.c文件。有效。在此之前,我將我的代碼編譯爲.cpp。這是正常的嗎? –