Menu
Coddy logo textTech

Puntatori a struct

Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 44 di 63.

Ora che hai acquisito dimestichezza con le struct, è il momento di combinarle con un altro potente concetto del C: i puntatori. Proprio come puoi creare puntatori a tipi di dati di base come int o char, puoi anche creare puntatori che contengono l'indirizzo di una variabile struct.

La sintassi per dichiarare un puntatore a una struct segue lo stesso schema delle altre dichiarazioni di puntatori:

struct StructureName *pointerName;

Per esempio, usando la nostra familiare struct Point:

struct Point p1 = {10, 20};
struct Point *ptr;

Questo crea un puntatore chiamato ptr che può memorizzare l'indirizzo di una struct Point. Per fare in modo che il puntatore punti effettivamente alla nostra variabile struct, usa l'operatore di indirizzo:

ptr = &p1;

Ora ptr contiene l'indirizzo di memoria della variabile struct p1. Questo apre nuove possibilità per lavorare con le struct, soprattutto quando le passi alle funzioni o gestisci la memoria in modo dinamico. I puntatori alle struct sono essenziali per creare strutture dati più complesse e scrivere programmi C efficienti.

challenge icon

Sfida

Facile

Crea un programma in C che dimostri l’uso dei puntatori a struct. Il tuo programma deve:

  1. Definire una struct denominata Product con i seguenti membri:
    • Un intero id per memorizzare l’ID del prodotto
    • Un array di caratteri name di dimensione 25 per memorizzare il nome del prodotto
    • Un float price per memorizzare il prezzo del prodotto
    • Un intero quantity per memorizzare la quantità disponibile
  2. Nella funzione principale, creare una variabile Product denominata item e inizializzarla con i seguenti valori:
    • ID: 501
    • Nome: "Laptop"
    • Prezzo: 899.99
    • Quantità: 15
  3. Dichiarare un puntatore a una struct Product denominato itemPtr
  4. Assegnare l’indirizzo della variabile item a itemPtr usando l’operatore di indirizzo
  5. Stampare le informazioni originali del prodotto accedendo direttamente ai membri della struct (usando l’operatore punto) in questo formato esatto:
    • Original Product Info:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  6. Stampare le stesse informazioni del prodotto accedendo ai membri della struct tramite il puntatore (usando l’operatore di dereferenziazione e la notazione con il punto: (*itemPtr).member) in questo formato esatto:
    • Product Info via Pointer:
    • ID: [id]
    • Name: [name]
    • Price: [price]
    • Quantity: [quantity]
  7. Verificare che il puntatore punti correttamente alla struct stampando gli indirizzi di memoria in questo formato esatto:
    • Address of item: [address]
    • Value of itemPtr: [address]
    • Address verification: [result]

Per la verifica dell’indirizzo, stampare Match se gli indirizzi sono uguali oppure No Match se sono diversi.

Questa sfida verifica la tua comprensione della dichiarazione di un puntatore a una struct, dell’assegnazione dell’indirizzo usando l’operatore di indirizzo e dell’accesso ai membri della struct tramite puntatori usando l’operatore di dereferenziazione insieme alla notazione con il punto. Verificherai inoltre che il puntatore contenga correttamente l’indirizzo della variabile struct.

Provalo tu

#include <stdio.h>
#include <string.h>

// TODO: Definisci qui la struct Product

int main() {
    // TODO: Scrivi qui il tuo codice
    // 1. Crea e inizializza la variabile Product 'item'
    // 2. Dichiara un puntatore a Product chiamato 'itemPtr'
    // 3. Assegna l'indirizzo di 'item' a 'itemPtr'
    // 4. Stampa le informazioni originali del prodotto usando l'operatore punto
    // 5. Stampa le informazioni del prodotto tramite il puntatore usando (*itemPtr).member
    // 6. Stampa e verifica gli indirizzi
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C online