Задать вопрос
Qubc
@Qubc
Ненавижу полисемию.

Какой смысл несет слово «имитация» в словосочетании «имитация передачи аргументов по ссылке»?

Давно хотел спросить, для чего здесь слово "симуляция"?
In C, you use pointers and the indirection operator to simulate pass-by-reference. When calling a function with arguments that should be modified, the addresses of the arguments are passed.
В языке C указатели и оператор косвенного доступа используются для имитации передачи аргументов по ссылке. Когда функция должна изменить значение аргумента, ей передается адрес этого аргумента.
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 3
@zedxxx
В Си нету такого понятия как "ссылка" (это понятие из С++) и Си-шный код может только имитировать такое поведение как "передача по ссылке", используя указатели.
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
C всегда передает аргументы по значению. Для имитации передачи по ссылке передается значение указателя. Всегда по ссылке передают аргументы Fortran и Perl. В C++ можно передавать и по ссылке и по значению.
Ссылка - это псевдоним, второе имя переменной.
Указатель - это адрес в памяти где хранится значение.
Ссылка - абстракция выше чем указатель на память. Ссылка не знает об организации памяти - это просто псевдоним. Указатель - только один из способов реализации ссылки.
При передаче по значению делается копия переменной (в C для имитации call-by-reference копируется указатель).
При передаче по ссылке - передается псевдоним переменной.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
В Си нету такого понятия как "ссылка" (это понятие из С++).
В С++ ссылки используют для изменения переменных на которые ссылается ссылка.
В Си для этого используют указатель.
Что бы еще больше имитировать ссылку, можно аргумент функции объявлять как константный указатель:
void func(char * const str);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы