Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 7 Пользовательские типы данных.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
96.26 Кб
Скачать

7.5 Указатели на структуры

Если структурная переменная (или массив) является динамической или передаётся в функцию по адресу (через указатель), то возникает необходимость добраться до полей через указатель. Для этого можно использовать два способа:

1) доступ с помощью операций «разадресация» и «точка». Этот способ использовался в языке С: (*Указатель) . ИмяПоля

Скобки здесь стоят для того, чтобы повысить приоритет операции *.

2) доступ с помощью операции «стрелка», которая появилась в языке С++:

Указатель -> ИмяПоля

И в том, и в другом случае мы получим значение поля.

Если же нам необходим адрес поля, то необходимо использовать операцию «взятия адреса»:

&(*Указатель) . ИмяПоля или &(Указатель -> ИмяПоля).

Покажем на простом примере работу с полями динамической структурной переменной:

#include <stdio.h>

struct MyType {

float A;

double B;

int C[2];

};

void main()

{

MyType *Ptr; // объявление указателя

Ptr = new MyType; // создание динамической структурной переменной

(*Ptr).A = 0.5; // доступ к полю A 1-м способом

Ptr->B = 3.5; // доступ к полю B 2-м способом

}

Если необходимо получить доступ к полям динамического массива структур, то используется операция «индексации» указателя Ptr[i], как и для обычного динамического массива, например:

void main()

{

MyType *Ptr; // объявление указателя

printf ( " N = " );

scanf ( "%d", &N );

Ptr = new MyType [N]; // создание динамического массива структур

for( int i = 0; i < N; i++ ) // блок ввода массива структур

{

scanf ( " %f ", &(Ptr[i].A) );

scanf ( " %lf ", &(Ptr[i].B) );

for( int j = 0; j < 2; j++ )

scanf ( " %d ", &(Ptr[i].C[j]) );

}

}

7.6 Передача информации о структурах функциям