2010-10-25 4 views
0

Я не использовал C через 5-6 лет и считаю, что это, вероятно, действительно очевидный ответ.Передача/изменение многомерного массива для работы в C

Я думал, что массивы автоматически передаются по ссылке в C, поэтому мой код ниже должен изменить значения массива, созданного в main() в функции изменения. Он изменяет значения локальной переменной в функции изменения, но это не отражается впоследствии в основной функции.

Вот мой код для моего примера:

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"); 
} 

Выход следующим образом:

ДО (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,

после изменения (изменить): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

ПОСЛЕ (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 (ИЗМЕНЕНИЕ): 1, 1, 1 , 1, 1 , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

ПОСЛЕ ИЗМЕНЕНИЯ (ИЗМЕНЕНИЕ): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

ПОСЛЕ (ГЛАВНЫЙ): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

ответ

3

Если установить значение 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 для печати?

+0

Good Point! FFS! Теперь, чтобы попробовать это на моей реальной программе и посмотреть, почему это не работает. – shazbox

Смежные вопросы