Язык Си в примерах/Учимся складывать: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 70:
 
Желающим изучить использование других числовых типов в этой задаче предлагается обратиться к разделу «[[Язык Си в примерах/Скалярные типы#Числовые типы|Числовые типы]]» приложения.
 
== Л-значения и ссылки ==
 
Вызов функции в чем-то подобен отправке письма. Мы указываем на конверте имя функции, вкладываем в конверт копии значений, которые хотим передать, и отправляем письмо (вызываем функцию).
 
В некоторых случаях, однако, мы хотим получить от функции что-либо обратно. Иногда, для этого достаточно предусмотренного языком ''возвращаемого значения''. Иначе, можно отправить функции своего рода ''конверт с обратным адресом'' (один или несколько). Именно для этого — для получения ''адреса л-значения'' — служит унарный оператор <code>&</code>.
 
Так, запись <code>&a</code> означает ''адрес ячейки памяти, выделенной для хранения значения переменной <code>a</code>'', или же, проще, — ''ссылка'' (англ. {{lang|en|reference}}) на переменную <code>a</code>.
 
Справа от оператора <code>&</code> указывается ''л-значение'' (англ. {{lang|en|lvalue}}.<ref name="lvalues et al" >[http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf#page=72 WG14 N1570 Committee Draft — April 12, 2011] 6.3.2.1 ''Lvalues, arrays, and function designators''</ref> Не вдаваясь в подробности отметим, что под л-значением понимают любое выражение, которое может стоять ''слева'' от оператора присваивания <code>=</code>. В частности, л-значением является любое выражение, состоящие из имени действительной в данном контексте (англ. {{lang|en|scope}}) переменной.
 
Для обращения к ячейки памяти по ссылке используется унарный оператор <code>*</code>. Так, выражение <code>*(&a) = 1</code> полностью равнозначно <code>a = 1</code>.
 
== Вариант «арифметический» ==