Всем доброго дня. Не так давно я изучаю С изучаю самостоятельно, так же рядом нет людей которые могут помочь и подсказать что-либо, надеюсь на вашу помощь. Собственно вопрос:
Есть в С символьные массивы и функции, и вот в той самой книге K&R описано поведение и вот к примеру код:
#include <stdio.h>
#include <string.h>
void change_a(char b[]);
int main() {
char a[] = "test\n";
printf(a);
change_a(a);
printf(a);
return 0;
}
void change_a(char b[]) {
int i;
for (i = 0; i < strlen(b) -1; i++)
b[i] = '3';
}
Этот код можно запуститьи увидеть что a[] изменяется. Я понимаю как это работает, я разобрался, да. Но почему оно так работает? Мы передаем массив в функцию, которая ничего не возвращает. Мы не переприсваем новые данные этому массиву в основной функции. Итого передав массив в качестве аргумента к какой-либо функции этот самый аргумент может быть изменен? Я не дошел еще до ссылок, но это не похоже на ссылки. Может кто-то объяснить почему так? Я могу и путать конечно, но разве этой не основа основ? То что передается в качестве аргумента не должно быть изменено, если нет явного присваивания.