Почему вызванная функция не может изменить переменную из вызывающей функции? - C (СИ)

Формулировка задачи:

У меня вопрос: Почему вызванная функция не может изменить переменную из вызывающей функции (она, типа того, может менять только свою собственную временную копию) - ну и передала бы значение временной копии вызывающей функции. Чтобы вызванная функция смогла изменить переменную из вызывающей функции надо прибегнуть с заморочками в виде адресов и указателей. Зачем? Нашла такой пример: Например функция swap: Описание этой функции:
void swap (int *px, int *py)
Вызов этой функции:
swap (&a, &b);
почему б просто не передать в функцию swap аргументы a и b и передала бы получившиеся значения вызывающей функции? зачем в вызове нужны эти амперсанды (взятие адреса)? а в аргументах зачем печатать другие имена (почему не *a и *b) ? Непонятно. Объясните, пожалуйста. Добавлено через 14 минут Непонятно, зачем нужен адрес в памяти? можно же просто ограничиться значением.

Код к задаче: «Почему вызванная функция не может изменить переменную из вызывающей функции? - C (СИ)»

textual
scanf("%d", &x);

8   голосов, оценка 4.125 из 5


СОХРАНИТЬ ССЫЛКУ