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