Передача / изменение многомерного массива для работы в C - PullRequest
0 голосов
/ 26 октября 2010

Я не использовал С в течение 5-6 лет и чувствую, что это, вероятно, действительно очевидный ответ.

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

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

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

Вывод выглядит следующим образом:

ДО (ГЛАВНАЯ): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

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

ПОСЛЕ (ГЛАВНАЯ): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

Я бы подумал, что это должно быть так:

ДО (ГЛАВНАЯ): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,

ИЗМЕНЕНИЕ (ИЗМЕНЕНИЕ): 1, 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, 0, 0, 0, 0, 0,

1 Ответ

3 голосов
/ 26 октября 2010

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

...