Студопедия — 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; просмотров: 506. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Деятельность сестер милосердия общин Красного Креста ярко проявилась в период Тритоны – интервалы, в которых содержится три тона. К тритонам относятся увеличенная кварта (ув.4) и уменьшенная квинта (ум.5). Их можно построить на ступенях натурального и гармонического мажора и минора.  ...

Понятие о синдроме нарушения бронхиальной проходимости и его клинические проявления Синдром нарушения бронхиальной проходимости (бронхообструктивный синдром) – это патологическое состояние...

Опухоли яичников в детском и подростковом возрасте Опухоли яичников занимают первое место в структуре опухолей половой системы у девочек и встречаются в возрасте 10 – 16 лет и в период полового созревания...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

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