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 за достъп до елементи на човек.

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