Strutture C e puntatori (con esempi)

In questo tutorial imparerai a usare i puntatori per accedere ai membri delle strutture nella programmazione C. Imparerai anche ad allocare dinamicamente la memoria dei tipi di struttura.

Prima di imparare a usare i puntatori con gli struct, assicurati di controllare questi tutorial:

  • Puntatori C.
  • C struct

C Puntatori a struct

Ecco come puoi creare puntatori a strutture.

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

Qui, ptr è un puntatore a struct.

Esempio: accedere ai membri utilizzando il puntatore

Per accedere ai membri di una struttura utilizzando i puntatori, utilizziamo l' ->operatore.

 #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; )

In questo esempio, l'indirizzo di person1 viene memorizzato nel puntatore personPtr utilizzando personPtr = &person1;.

Ora puoi accedere ai membri di person1 usando il personPtrpuntatore.

A proposito,

  • personPtr->age è equivalente a (*personPtr).age
  • personPtr->weight è equivalente a (*personPtr).weight

Allocazione dinamica della memoria delle strutture

Prima di procedere in questa sezione, ti consigliamo di controllare l'allocazione dinamica della memoria C.

A volte, il numero di variabili struct dichiarate potrebbe essere insufficiente. Potrebbe essere necessario allocare memoria durante il runtime. Ecco come puoi ottenere questo risultato nella programmazione C.

Esempio: allocazione dinamica della memoria di strutture

 #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; ) 

Quando esegui il programma, l'output sarà:

 Immettere il numero di persone: 2 Immettere rispettivamente il nome e l'età: Harry 24 Immettere rispettivamente il nome e l'età: Gary 32 Informazioni visualizzate: Nome: Harry Età: 24 Nome: Gary Età: 32

Nell'esempio precedente, viene creato un numero n di variabili struct dove n viene immesso dall'utente.

Per allocare la memoria per n numero di struct persona, abbiamo usato,

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

Quindi, abbiamo usato il puntatore ptr per accedere agli elementi della persona.

Articoli interessanti...