Студопедия — Int *ptr; // объявили указатель на целую переменную
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Int *ptr; // объявили указатель на целую переменную






ptr = &x; // взяли адрес переменной х = 2

y = *ptr; // переменная y стала равной 1

*ptr = 0; // переменная х стала равной 0


Пример объявления указателя:

int *ptr;

Следует помнить, что любой указатель может указывать только на объекты одного конкретного типа данных, заданного при объявлении [1]. Унарный оператор * есть оператор косвенного доступа. Примененный к указателю он выдает объект, на который данный указательс сылается. Одноместные (унарные) операции * и &; имеют более высокий приоритет для своих операндов, чем арифметические операции.

Для указателей одного типа можно, например, выполнять присваивание без разыменования. Это вытекает из того, что указатели сами по себе являются переменными. Пусть определен еще один указатель типа int, например ptr2. Тогда возможно произвести присвоение:

ptr2 = ptr;

После этого указатель ptr2 будет указывать на ту же переменную, что и указатель ptr.

В языке С допустимы следующие основные операции над указателями: присваивание; получение значения того объекта, на который он указывает (синонимы: косвенная адресация, разыменование, раскрытие ссылки); получение адреса самого указателя; унарные операции изменения значения указателя; аддитивные операции и операции сравнений (отношений) [3].

Унарные операций «++» и «––» позволяют позиционировать указатель на следующую и предыдущую ячейки памяти, в которых хранятся значения типов, связанных с типом указателя. При этом значение указателя меняется на величину, определяемую размером соответствующего типа.

Например, для указателя типа char** операция «++» увеличит значение адреса на sizeof (char), для указателя типа int* операция «--» уменьшит значение адреса на sizeof (int) и так далее. Это свойство унарных операций «++» и «––» используется для последовательного обращения к значениям одного типа, связанного с типом указателя, хранящимся в смежных ячейках памяти. В таком смысле унарные операции «++» и «––» сходны с операциями увеличения и уменьшения счетчика цикла при последовательном обращении к элементам массива.

Следует особо остановиться на указателях и квалификаторе (модификаторе) const. Как известно, квалификатор const превращает переменную в константу, значение которой не должно меняться. Например, нет смысла изменять число p. Значение константы должно быть инициализировано в месте ее определения. В связи с этим различают указатели на константы и константные указатели [6]. Приведем пример:

long value = 9999L;

const long *pvalue = &value;

Последняя строчка данного кода представляет собой указатель на константу. Попытка указателю pvalue присвоить иное числовое значение будет восприниматься компилятором как ошибка [6]. Но само значение переменной value изменять допустимо. При этом указатель держит адрес переменной, значение которой изменилось. В то же время саму переменную также можно объявить с помощью квалификатора const. В этом случае нельзя изменять ни переменную, ни значение указателя (т. е. присвоить иное числовое значение указателю). Указатели на константы часто используются как формальные параметры функций (о функциях будет сказано позднее).

Константный указатель может адресовать как константу, так и переменную. В случае, когда определен константный указатель, через него нельзя уже брать адрес другой переменной. Рассмотрим пример определения константного указателя:

int count = 43;

int *const pcount = &count;

Вторая строчка приведенного кода определяет и инициализирует константный указатель pcount, который «привязан» к адресу переменной count. Если определить новую переменную того же типа, то взять адрес новой переменной с помощью константного указателя pcount будет нельзя, компилятор сделает сообщение об ошибке и работа программы станет невозможной. В то же время возможно изменить значение константного указателя через другое числовое значение. Но это повлечет за собой изменение переменной, адрес которой содержится в указателе. Например,

int count = 43;

int *const pcount = &count;

pcount = 345;

В приведенном коде переменная count будет иметь значение 345 [6].

Соответственно для константного указателя на константный объект (например, на константную переменную), ни значение объекта, ни значение самого указателя (когда будет сделана попытка присвоить иное числовое значение указателю) не могут быть изменены в программе. Например,

const int card = 21;

const int *const pcard = &card;

Перечисленные особенности указателей с квалификатором const присущи и переменных (объектам) других типов.

Указатели, значения которых изменять нельзя, используются, например, при заполнении константных таблиц.


 







Дата добавления: 2015-09-06; просмотров: 502. Нарушение авторских прав; Мы поможем в написании вашей работы!



Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Репродуктивное здоровье, как составляющая часть здоровья человека и общества   Репродуктивное здоровье – это состояние полного физического, умственного и социального благополучия при отсутствии заболеваний репродуктивной системы на всех этапах жизни человека...

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

Схема рефлекторной дуги условного слюноотделительного рефлекса При неоднократном сочетании действия предупреждающего сигнала и безусловного пищевого раздражителя формируются...

Studopedia.info - Студопедия - 2014-2024 год . (0.007 сек.) русская версия | украинская версия