C-структуры и указатели (с примерами)

В этом руководстве вы научитесь использовать указатели для доступа к членам структур в программировании на C. Вы также научитесь динамически выделять память структурных типов.

Прежде чем вы узнаете, как указатели могут использоваться со структурами, обязательно ознакомьтесь с этими руководствами:

  • Указатели C
  • C структура

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

Вот как вы можете создавать указатели на структуры.

 struct name ( member1; member2;… ); int main() ( struct name *ptr, Harry; )

Здесь ptr - это указатель на struct.

Пример: доступ к членам с помощью указателя

Чтобы получить доступ к членам структуры с помощью указателей, мы используем ->оператор.

 #include 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:"); printf("Age: %d", 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 #include 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 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:"); for(i = 0; i name, (ptr+i)->age); return 0; ) 

Когда вы запустите программу, вывод будет:

 Введите количество человек: 2 Введите имя и возраст соответственно: Гарри 24 Введите имя и возраст соответственно: Гэри 32 Отображаемая информация: Имя: Гарри Возраст: 24 Имя: Гэри Возраст: 32

В приведенном выше примере создается n структурных переменных, где n вводится пользователем.

Чтобы выделить память для n структурных лиц, мы использовали:

 ptr = (struct person*) malloc(n * sizeof(struct person));

Затем мы использовали указатель ptr для доступа к элементам person.

Интересные статьи...