English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Corso di base del linguaggio C

Controllo di flusso del linguaggio C

Funzioni del linguaggio C

Array del linguaggio C

Puntatori del linguaggio C

Stringhe del linguaggio C

Strutture del linguaggio C

File del linguaggio C

Altri C

Manuale di riferimento del linguaggio C

Strutture e puntatori del linguaggio C

In questa guida, imparerai a accedere ai membri delle strutture nel linguaggio C utilizzando i puntatori. Inoltre, imparerai a allocare memoria dinamicamente per tipi di struttura.

Prima di comprendere come utilizzare i puntatori con le strutture, è necessario leggere attentamente la seguente guida:

Puntatore a struttura in C

Ecco come creare un puntatore a struttura.

struct name {
    member1;
    member2;
    .
    .
};
int main()
{
    struct name *ptr, Harry;
}

In questo caso, ptr è un puntatore a struct.

Esempio: accesso ai membri tramite puntatore

Per accedere ai membri della struttura tramite un puntatore, utilizziamo l'operatore ->.

#include <stdio.h>
struct person
{
   int age;
   float weight;
};
int main()
{
    struct person *personPtr, person1;
    personPtr = &person1;   
    printf("Inserisci età: ");
    scanf("%d", &personPtr->age);
    printf("Inserisci peso: ");
    scanf("%f", &personPtr->weight);
    printf("Visualizza:\n");
    printf("Età: %d\n", personPtr->age);
    printf("Peso: %f", personPtr->weight);
    return 0;
}

Risultato di output

Inserisci età: 25
Inserisci peso: 55
Mostra:
Età: 25
Peso: 55.000000

In questo esempio, usa personPtr =&person1; per memorizzare l'indirizzo di person1 nel puntatore personPtr.

Ora puoi accedere ai membri del membro person1 utilizzando il puntatore personPtr.

A proposito di questo:

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

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

Assegnazione dinamica di memoria per struttura

Prima di continuare, ti consiglio di verificareAssegnazione dinamica di memoria C.

A volte, il numero di variabili struct dichiarate potrebbe non essere sufficiente. Potrebbe essere necessario allocare memoria durante l'esecuzione. Ecco come puoi raggiungere questo obiettivo nel linguaggio di programmazione C.

Esempio: assegnazione dinamica di memoria per struttura

#include <stdio.h>
#include <stdlib.h>
struct person {
   int age;
   float weight;
   char name[30];
};
int main()
{
   struct person *ptr;
   int i, n;
   printf("Inserisci numero di persone: ");
   scanf("%d", &n);
   //Assegna memoria per n variabili struct person
   ptr = (struct person*) malloc(n * sizeof(struct person));
   for(i = 0; i < n; ++i)
   {
       printf("Inserisci nome e età separatamente: ");
         //Per accedere ai membri del primo struct person
         //Puoi usare ptr->name e ptr->age
        //Per accedere ai membri del secondo struct person
        //Usa (ptr + 1)->nome e (ptr + 1)-> età
       scanf("%s %d", (ptr+i)->name, &(ptr+i)->age);
   }
   printf("Mostra informazioni:\n");
   for(i = 0; i < n; ++i)
       printf("Nome: %s	Età: %d\n", (ptr+i)->name, (ptr+i)->age);
   return 0;
}

Esegui il programma, l'output sarà:

Inserisci numero di persone: 2
Inserisci nome e età separatamente: Harry 24
Inserisci nome e età separatamente: Gary 32
Mostra informazioni:
Nome: Harry	Età: 24
Nome: Gary	Età: 32

Nell'esempio precedente, sono stati creati n variabili struct.

Per allocare memoria per n struct person, utilizziamo,

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

Poi, utilizziamo il puntatore ptr per accedere agli elementi di person.