Я не использовал 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,
Good Point! FFS! Теперь, чтобы попробовать это на моей реальной программе и посмотреть, почему это не работает. – shazbox