Использование указателей для эмуляции Pass-by-Reference в функции Pass-by-Value (C и C ++)

Поэтому я пытаюсь понять простую часть кода, которая «эмулирует» пошаговую ссылку с помощью указателей в функции «Передать по значению». Пример дается как практика C, поскольку в C. отсутствует ссылка Pass in reference, но мне также интересно узнать о ее влиянии на C ++.

поэтому после запуска этого кода значения меняются местами:

void swap(int* a, int* b) { int temp; temp = *a; *a = *b; *b = temp; } 

Я пытаюсь понять, почему передача указателей в качестве аргументов создает эффект сквозной ссылки? Означает ли это, что все действия, выполняемые с помощью указателей, имеют эффект сквозной ссылки? Таким образом, место смены памяти не будет возвращено после выхода из функции? Будет ли это также действовать на C ++?

Новое в кодировании, поэтому я надеюсь, что смогу понять.

В принципе, ваш код копирует адрес памяти в функцию, а если вы опустили оператор * , функция будет копировать то, что находится в адресе памяти функции. Вот что говорит каждая строка.

 // Give me the memory address of a and b. void swap(int* a, int* b) { int temp; // Whatever value is at memory address 'a', copy it to temp. temp = *a; // Whatever value is at memory address 'b', copy it to memory address 'a'. *a = *b; // Copy temp over the value at memory address 'b'. *b = temp; } 

И да, это было бы одинаково справедливо в C ++.

Вы можете в принципе думать о указателях и ссылках как одно и то же. Оба они относятся к адресам. Поэтому, если вы передаете адрес (либо в качестве указателя, либо как ссылку) на функцию, а содержимое адреса изменяется, то изменение все равно присутствует в конце функции.