Указатели на структуры
На структуры, как и на объекты других типов, можно определять указатели. Например, указатель на структуру 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. И используя указатель, мы можем получить или изменить значения элементов структуры.