![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Указатели
Указатели (ссылки) – это переменные, показывающие место или адрес памяти, где расположены другие объекты (переменные, функции и т.п.). Т.к. указатель содержит адрес некоторого объекта, то через него можно обращаться к этому объекту. Почему я в последнем случае написала «переменную», а не «значение переменной»? Потому что это выражение (*p) может стоять как в правой части оператора присваивания (будет возвращено значение, хранящееся в памяти по адресу p), так и в левой части оператора присваивания (в память по этому адресу запишется значение). Выражения, обладающие такими свойствами, называют L-выражениями (L-Value). У такого выражения есть АДРЕС, ТИП и, разумеется, ЗНАЧЕНИЕ. Но у него нет ИМЕНИ И нет ОБЛАСТИ ВИДИМОСТИ.
Формат: описания переменной указателя < тип> *< имя> [, *< имя> ]...;
Объекты, состоящие из знака * и адреса необходимо объявлять! Объявление вида: char *d; говорит о том, что значение, записанное по адресу d, имеет тип char. Пример: int *kol, *num; Признаком указателя служит *. double *lenght; Операции над указателями: над указателями определены две унарные операции: & * Унарная операция & возвращает адрес объекта в явном виде, поэтому оператор: y = & x; присваивает адрес x переменной y. Операцию & нельзя применять к константам и выражениям. Операция применима только к объектам, имеющим имя и размещенным в памяти. Унарная операция * воспринимает свой операнд как адрес некоторого объекта и использует этот адрес для выборки содержимого. Поэтому, оператор: z = *y; присваивает z значение переменной, записанной по адресу y.
Пример: int x, y, *px; px=& x; y=*px; Это эквивалентно y = x; Указатели могут встречаться в выражениях. Если y – указатель на целое (int *y;), то *y может появляться там же, где и любая другая переменная, не являющаяся указателем. Пример: *y = 7; //заносим 7 в ячейку памяти по адресу y *x = *x*5; //увеличиваем значение по адресу x в 5 раз (* z)++; //добавляем 1 к содержимому ячейки памяти с адресом z, круглые скобки обязательны
Вывод:
|