C-структуры и указатели
Структуры и указатели языка C
В этом руководстве вы научитесь использовать указатели для доступа к членам структур в программировании на C. Вы также научитесь динамически выделять память для типов структур.
Прежде чем вы узнаете, как использовать указатели со структурами, обязательно ознакомьтесь с этими руководствами:
- C указатели
- Структура
C указатели на структуру
Вот как можно создавать указатели на структуры.
struct name {
member1;
member2;
.
.
};
int main()
{
struct name *ptr, Harry;
}
Здесь ptr указатель на struct
.
Пример:доступ к членам с помощью указателя
Чтобы получить доступ к членам структуры с помощью указателей, мы используем ->
оператор.
#include <stdio.h>
struct person
{
int age;
float weight;
};
int main()
{
struct person *personPtr, person1;
personPtr = &person1;
printf("Enter age: ");
scanf("%d", &personPtr->age);
printf("Enter weight: ");
scanf("%f", &personPtr->weight);
printf("Displaying:\n");
printf("Age: %d\n", personPtr->age);
printf("weight: %f", personPtr->weight);
return 0;
}
В этом примере адрес person1 хранится в personPtr указатель с использованием personPtr = &person1;
.
Теперь вы можете получить доступ к членам person1 используя personPtr
указатель.
Кстати,
personPtr->age
эквивалентно(*personPtr).age
personPtr->weight
эквивалентно(*personPtr).weight
Динамическое выделение памяти для структур
Прежде чем продолжить этот раздел, мы рекомендуем вам проверить выделение динамической памяти C.
Иногда количество объявленных вами структурных переменных может быть недостаточным. Возможно, вам потребуется выделить память во время выполнения. Вот как этого можно добиться в программировании на C.
Пример:динамическое выделение памяти для структур
#include <stdio.h>
#include <stdlib.h>
struct person {
int age;
float weight;
char name[30];
};
int main()
{
struct person *ptr;
int i, n;
printf("Enter the number of persons: ");
scanf("%d", &n);
// allocating memory for n numbers of struct person
ptr = (struct person*) malloc(n * sizeof(struct person));
for(i = 0; i < n; ++i)
{
printf("Enter first name and age respectively: ");
// To access members of 1st struct person,
// ptr->name and ptr->age is used
// To access members of 2nd struct person,
// (ptr+1)->name and (ptr+1)->age is used
scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
}
printf("Displaying Information:\n");
for(i = 0; i < n; ++i)
printf("Name: %s\tAge: %d\n", (ptr+i)->name, (ptr+i)->age);
return 0;
}
Когда вы запустите программу, вывод будет:
Enter the number of persons: 2 Enter first name and age respectively: Harry 24 Enter first name and age respectively: Gary 32 Displaying Information: Name: Harry Age: 24 Name: Gary Age: 32
В приведенном выше примере n создается количество структурных переменных, где n вводится пользователем.
Чтобы выделить память для n количество структурных лиц , мы использовали,
ptr = (struct person*) malloc(n * sizeof(struct person));
Затем мы использовали ptr указатель на доступ к элементам person .
Язык C