Если структурная переменная (или массив) является динамической или передаётся в функцию по адресу (через указатель), то возникает необходимость добраться до полей через указатель. Для этого можно использовать два способа:
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]));
}
}
Передача информации о структурах функциям