Я не использовал С в течение 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,