Четверг, 09.01.2025, 11:50
Главная Регистрация RSS поиск
Приветствую Вас, Гость
Меню сайта
Категории раздела
HTML [44]
Visual C++ и MFC [21]
c++ [78]
php [19]
Javascript [15]
C# [51]
загрузки [0]
XNA [10]
создание игр с помощью xna
Наш опрос
Каким языком программирования вы увлекаетесь
Всего ответов: 2420
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Реклама
Главная » Статьи » c++

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

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

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

Например,

// опеределение структуры Date
struct 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 // через разыменованный указатель
Категория: c++ | Добавил: slava (30.05.2011)
Просмотров: 5853 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]