2015-11-03 45 views
-1

在我的程序我使用了一種叫做函數在C編程中如何在函數外使用數組值賦值的數組值?

void printBoard(char board[26][26], int n); 

這是我的實際編碼:

#include <stdio.h> 
#include <stdlib.h> 
void printBoard(char board[26][26], int n); 

int main(void) { 
    //variable 'n' determines board dimension 
    int n; 
    printf("Enter the board dimension: "); 
    scanf("%d",&n); 
    char board[n][n]; 
    printBoard(board, n); 
    printf("\n\n"); 
    for(int i=0;i<n;i++){ 
     for(int j=0;j<n;j++){ 
      printf("%c",board[i][j]); 
     } 
     printf("\n"); 
    } 
     return (EXIT_SUCCESS); 
} 

void printBoard(char board[26][26], int n){ 
    printf(" "); 
    for(int i=0;i<n;i++){ 
     printf("%c",97+i); 
    } 
    printf("\n"); 
    for(int i=0;i<n;i++){ 
     for(int j=0;j<n;j++){ 
      board[i][j]='U'; 
     } 
    } 
    board[(n/2)-1][(n/2)-1]='W'; 
    board[n/2][n/2]='W'; 
    board[(n/2)-1][n/2]='B'; 
    board[n/2][(n/2)-1]='B'; 
    for(int i=0;i<n;i++){ 
     printf("%c ",97+i); 
     for(int j=0;j<n;j++){ 
      printf("%c",board[i][j]); 
     } 
     printf("\n"); 
    } 
} 

數組的值「板[26] [] 26」獲取裏面的功能分配的' printBoard」。所以一旦我超出這個函數的範圍,這個值就會丟失。但是我需要在這個函數之外使用這個數組的值。我怎樣才能做到這一點?

謝謝

+1

如果函數更改了電路板陣列的值,它應該保留在函數外部,因爲它正在修改陣列中的實際內存。它不是這樣嗎?如果沒有,請發佈更多的代碼。 – kcraigie

+0

我在上面的問題中添加了我的實際功能@kcraigie –

+0

是的,我期望實際上改變傳遞的數組的內容,使得該函數返回後數組將包含新值 – kcraigie

回答

0

你不是陣列突入printBoard的價值,你只是傳遞一個指針。函數中的更改將持續超出函數,因爲您正在修改相同的內存,而不是副本。如果您看到意外的輸出,那不是因爲printBoard所做的更改造成的範圍問題。

+0

否該值在函數外部消失。 –

+0

請嘗試用比「消失」更多的技術來解釋。如果它真的消失了,那麼你正在處理上帝的行爲,所以不能幫助你。如果您不知道更多細節,請設置一箇中斷點,使用調試器,驗證您正在訪問的內容,其值是什麼,以及這些值的更改時間。 – orfdorf

+0

我剛添加了我的主要代碼,請看看我在這裏弄錯了什麼? @Spagpants –