Структури та вказівники (з прикладами)

У цьому підручнику ви навчитеся використовувати покажчики для доступу до членів структур у програмуванні на 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 для доступу до елементів людини.

Цікаві статті...