Menu
Coddy logo textTech

Confrontare i puntatori

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

Hai imparato a spostarti negli array usando l’aritmetica dei puntatori. Ora scoprirai che i puntatori possono anche essere confrontati usando gli stessi operatori relazionali che usi con le normali variabili: ==, !=, < e >.

Quando confronti due puntatori, stai confrontando i loro indirizzi di memoria. Questo è particolarmente utile quando entrambi i puntatori puntano a elementi all'interno dello stesso array, poiché ti permette di determinarne le posizioni relative in memoria.

int numbers[5] = {10, 20, 30, 40, 50};
int *start = numbers;        // Punta al primo elemento
int *end = numbers + 4;      // Punta all'ultimo elemento

if (start < end) {
    printf("start comes before end in memory");
}

Il confronto tra puntatori diventa particolarmente potente nelle condizioni dei cicli. Invece di usare una variabile contatore, puoi confrontare la posizione attuale del puntatore con un puntatore di destinazione per stabilire quando il ciclo deve fermarsi. Questo permette di creare codice elegante ed efficiente per attraversare gli array.

L'intuizione fondamentale è che ptr1 < ptr2 ti dice che ptr1 punta a un elemento che compare prima nell'array rispetto all'elemento a cui punta ptr2. Questa relazione rende il confronto tra puntatori particolarmente adatto a controllare i cicli che elaborano gli array in sequenza.

challenge icon

Sfida

Facile

Scrivi un programma C che utilizzi il confronto tra puntatori per attraversare un array e trovare gli elementi compresi in un intervallo specifico. Il programma deve:

  1. Dichiarare un array di interi chiamato scores con 8 elementi e inizializzarlo con i valori {45, 78, 92, 63, 87, 34, 91, 56}
  2. Dichiarare due puntatori a interi: start_ptr e end_ptr
  3. Impostare start_ptr in modo che punti al primo elemento dell'array
  4. Impostare end_ptr in modo che punti all'ultimo elemento dell'array usando l'aritmetica dei puntatori
  5. Dichiarare un puntatore chiamato current_ptr e inizializzarlo in modo che punti al primo elemento
  6. Usare un ciclo while con il confronto tra puntatori (current_ptr <= end_ptr) per attraversare l'array
  7. All'interno del ciclo:
    • Verificare se il valore corrente è compreso tra 60 e 90 (inclusi)
    • Se il valore è nell'intervallo, stampare "Value [value] is in range"
    • Se il valore non è nell'intervallo, stampare "Value [value] is out of range"
    • Incrementare current_ptr per passare all'elemento successivo
  8. Dopo il ciclo, usare il confronto tra puntatori per verificare che current_ptr si trovi ora oltre la fine dell'array, controllando se current_ptr > end_ptr
  9. Se la condizione è vera, stampare "Traversal complete"

L'output deve mostrare i risultati nel formato seguente:

Value 45 is out of range
Value 78 is in range
Value 92 is out of range
Value 63 is in range
Value 87 is in range
Value 34 is out of range
Value 91 is out of range
Value 56 is out of range
Traversal complete

Questa sfida verifica la tua comprensione degli operatori di confronto tra puntatori nelle condizioni dei cicli, dell'uso dell'aritmetica dei puntatori per impostare i puntatori di confine e di come il confronto tra puntatori possa controllare l'attraversamento di un array in modo più elegante rispetto ai tradizionali cicli basati su contatori.

Provalo tu

#include <stdio.h>

int main() {
    // TODO: Scrivi il tuo codice qui sotto
    
    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