C ++
Это будет работать в C ++, потому что сигнатура функции для get()
, вероятно, такая:
void get(char& a); // pass-by-reference
Символ &
после char
обозначает для компилятора, чем когда вы передаете значение char
, он должен передать ссылку в char
вместо создания копии это.
По сути это означает, что любые изменения, внесенные в get()
, будут отражены в значении a
вне метода.
Если подпись функции для get()
была такой:
void get(char a); // pass-by-value
затем a
будет передано значением , что означает, что копия a
создается перед передачей в метод в качестве параметра. Любые изменения в a
будут только локальными для метода и будут потеряны при возврате метода.
C
Причина, по которой это не сработает в C, заключается в том, что C имеет только значение передачи . Единственный способ эмулировать поведение pass-by-reference в C - это передать его указатель по значению, а затем отменить ссылку на значение указателя (таким образом получая доступ к той же ячейке памяти) при изменении значения внутри метода :
void get(char* a)
{
*a = 'g';
}
int main(int argc, char* argv[])
{
char a = 'f';
get(&a);
printf("%c\n", a);
return 0;
}
Запуск этой программы выдаст:
g