Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор указателя на структуру

Имя структуры обладает всеми правами имен типов, а следовательно, можно определять указатели на структуры:

имя_структуры *имя_указателя на структуру;

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

Например,

// опеределение структуры Datestruct Date { int day; int month; int year; }; void main(){ Date my_date, // определение переменной my_date типа Date *birthday; // объявление указателя на объект типа Date // инициализация указателя birthday адресом структуры my_date birthday = &my_date; //...}

В предыдущих разделах для доступа к элементам структуры мы использовали операцию точка (.). Операция точка обращается к элементу структуры по имени переменной объекта. Но, если у нас определен указатель на структуру, то появляется еще одна возможность доступа к элементам структуры. Ее обеспечивает оператор стрелка (->). Формат соответствующего выражения следующий:

имя_указателя->имя_элемента_структуры

Оператор стрелка, состоящий из знака минус (-) и знака больше (>), записанных без пробела, обеспечивает доступ к элементам структуры через указатель на объект.

Например,

// продолжение примера /* используем операцию точка, чтобы инициализировать элементы структуры my_date */ my_date.year = 2001; my_date.month = 2; my_date.day = 10; /* используем операцию точка, чтобы вывести на экран элементы структуры my_date */ cout << "The date is " << my_date.day << "/" << my_date.month << "/" << my_date.year << endl; /* используем операцию стрелка, чтобы вывести на экран элементы структуры my_date через указатель birthday*/ cout << "My birthday is " << birthday->day << "." << birthday->month << endl;

Выражение birthday->month эквивалентно (*birthday).month, которое разыменовывает указатель и делает доступным элемент month через оператор точка. Скобки нужны, т.к. оператор точка имеет более высокий приоритет, чем оператор разыменования указателя (*).

 

Как и для других объектов, для структур могут быть определены ссылки:

имя_структуры &имя_ссылки_на_структуру инициализатор;

Например, для переменной my_date можно, так ввести ссылку:

Date &now = my_date;

После такого определения now является синонимом имени пременной my_date. Для доступа к элементам структуры используется оператор точка.

Таким образом, следующие четыре выражения эквивалентны и обеспечивают доступ к элементу month переменной my_date типа Date.

my_date.month //по имени переменной now.month // по ссылке birthday->month // через указатель (*birthday).month // через разыменованный указатель

 

<== предыдущая лекция | следующая лекция ==>
Определения структур | Сложное сопротивление. Косой изгиб
Поделиться с друзьями:


Дата добавления: 2014-01-14; Просмотров: 316; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.