2014-11-06 73 views
-2

我有這兩個功能:如何在另一個函數中訪問這個二維數組?

void insert(void) //inserts values in the bidimensional array 
{ 
    int array[d][d]; // d is the value given by the user elsewhere 
    int a = 0; 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      array[i][j] = (d*d) - a; 
      a++; 
     } 
    } 
} 

void show(void) //prints the values 
{ 
    for (int i = 0; i < d; i++){ 
     for (int j = 0; j < d; j++){ 
      printf("%d", array[i][j]); 
     } 
     printf("\n"); 
    } 
} 

我的問題是,該節目()函數只打印零(0),但這些都不是正確的價值觀。我知道值插入正確,因爲當我把printf(「%d」,數組[i] [j]);在insert()函數的循環中,它正常打印。所以我的猜測是show()函數不訪問數組的值,因爲它是在另一個函數中聲明的。

所以我試圖讓該數組全局寫入函數外,但它給了我錯誤:「變長數組聲明不允許在文件範圍」,所以我試圖把它放在main()中,在調用之前上面的兩個函數,但我得到了另一個錯誤:「未使用的變量」數組「」。

那麼誰能幫我弄清楚如何在show()函數中訪問該數組?

P.S.我想要這兩個功能:一個獲取和其他顯示數字,我不想要一個單一的功能。

+0

你有很多不確定的變數!你在哪裏定義了d或v? – Rizier123 2014-11-06 03:15:42

+0

對不起,它們實際上是相同的變量,我試圖簡化並最終拒絕循環部分。但它已經得到糾正,我改變了v爲d。 d是用戶在代碼的其他部分給出的值,這只是我遇到麻煩的部分。 – Gabriel 2014-11-06 03:23:47

+0

在'show'中沒有聲明'array'。你有一個同名的全局變量嗎? – 2014-11-07 10:46:13

回答

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

void *Array = NULL; 
int D; 

void insert(void){ 
    int (*array)[D] = Array; 
    int a = 0; 
    for (int i = 0; i < D; i++){ 
     for (int j = 0; j < D; j++){ 
      array[i][j] = (D*D) - a; 
      a++; 
     } 
    } 
} 

void show(void){ 
    int (*array)[D] = Array; 
    for (int i = 0; i < D; i++){ 
     for (int j = 0; j < D; j++){ 
      printf("%3d ", array[i][j]); 
     } 
     printf("\n"); 
    } 
} 

int main(void){ 
    D = 5; 
    Array = malloc(sizeof(int [D][D])); 
    insert(); 
    show(); 
    free(Array); 

    return 0; 
} 

int main(void){ 
    D = 5; 
    int array[D][D]; 
    Array = array; 
    insert(); 
    show(); 

    return 0; 
} 
-3

嘗試使用指針,傳遞數組作爲參考。既然你知道什麼是價值d

void show(int* arRef, int d) //prints the values, here pass d as length of array. 
    { 
     for (int i = 0; i < d; i++){ 
      for (int j = 0; j < d; j++){ 
       printf("%d", &arRef[i][j]); 
      } 
      printf("\n"); 
     } 
    } 
+0

像這樣使用兩組括號進行索引不適用於int *'。 – Dmitri 2014-11-06 05:43:44

0

這應該爲你工作:

你可以通過你的數組的指針!

#include <stdio.h> 


void insert(int d, int array[][d]) { 

    int a = 0, i , j; 

    for (i = 0; i < d; i++) { 
     for (j = 0; j < d; j++) { 
      array[i][j] = (d*d) - a; 
      a++; 
     } 
    } 
} 

void show(int d, int array[][d]) { 

    int i, j; 

    for (i = 0; i < d; i++){ 
     for (j = 0; j < d; j++) 
      printf(" %3d ", array[i][j]); 
     printf("\n"); 
    } 
} 


int main() { 

    int d = 5; //user input 
    int array[d][d]; //array 

    insert(d, array); 
    show(d, array); 


    return 0; 

} 
+0

通常,你可以寫show(int d,int array [] [d])或show(int d,int ** array)。 – booboo 2014-11-06 04:13:31

+0

@booboo哦Omg!是的,你說的沒錯!改變它爲'show(int d,int array [] [d])' – Rizier123 2014-11-06 04:17:23

+1

@booboo'int ** array'與'int array [] [d]'不同,並且不起作用 – 2014-11-07 10:47:07

相關問題