2010-10-25 84 views
0

我在5-6年中沒有使用過C,並且覺得這可能是一個非常明顯的答案。我認爲數組在C中被自動傳遞,所以我的代碼應該修改在main函數中創建的數組值。它改變了變化函數中局部變量的值,但是這在主函數中沒有反映出來。傳遞/修改多維數組以在C中運行

這裏是我的我的例子的代碼:

int main(){ 
int array[3][5]; 
int i; 
int j;\ 

printf("BEFORE (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1; 
    printf("%i, ", array[i][j]); 
} 
} 
printf("\n\n"); 
change(array); 
printf("\n"); 

printf("AFTER (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1; 
    printf("%i, ", array[i][j]); 
} 
} 
printf("\n"); 

return 1; 
} 

void change(int array[][5]){ 
printf("PRECHANGE (CHANGE):\n"); 
int i; 
int j; 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    printf("%i, ", array[i][j]); 
} 
} 

printf("\n\n"); 
printf("AFTER CHANGE (CHANGE):\n"); 

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

輸出如下:

BEFORE(MAIN): 1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,

PRECHANGE(CHANGE): 1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,

變更以後(CHANGE): 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,

AFTER(MAIN): 1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,

我還以爲它應該是這樣的:

前(MAIN): 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,

PRECHANGE(CHANGE): 1,1,1 ,1,1 ,1,1,1,1,1,1,1,1,1,1,

變更以後(CHANGE): 0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,

AFTER(MAIN): 0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,

回答

3

如果你設置你爲什麼想到要打印值爲0到1

printf("AFTER (MAIN):\n"); 
for(i = 0; i < 3; i++){ 
for(j = 0; j < 5; j++){ 
    array[i][j] = 1;     /* set to 1 and print afterwards */ 
    printf("%i, ", array[i][j]); 
} 
} 

+0

好點! FFS!現在試試我的真實程序,看看爲什麼這不起作用。 – shazbox 2010-10-25 23:11:58