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

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

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]));

}

}

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: