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


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

1
struct person *p;
Указатели на структуры можно создавать и для безымянных структурных типов:

1
2
3
4
5
struct
{
int age;
char name[20];
} *p1, *p2;
В качестве значения такому указателю присваивается адрес объекта структуры того же типа:

1
2
struct person kate = {31, "Kate"};
struct person *p_kate = &kate;
Используя указатель на структуру, можно получить доступ к ее элементам. Для этого можно воспользоваться двумя способами. Первый способ представляет применение операции разыменования:

1
(*указатель_на_структуру).имя_элемента
Второй способ предполагает использование операции -> (операция стрелка):

1
указатель_на_структуру->имя_элемента
Используем оба этих способа для обращения к элементам структуры:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>

struct person
{
int age;
char name[20];
};

int main(void)
{
struct person kate = {31, "Kate"};
struct person * p_kate = &kate;

char * name = p_kate->name;
int age = (*p_kate).age;

printf("name = %s \t age = %d \n", name, age);

// изменим элемент age в структуре
p_kate->age = 32;
printf("name = %s \t age = %d \n", kate.name, kate.age);
return 0;
}
Здесь определяется указатель p_kate на переменную kate. И используя указатель, мы можем получить или изменить значения элементов структуры.