Modificare le variabili tramite puntatori
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 27 di 63.
Ora puoi sfruttare la vera potenza dei puntatori: modificare la variabile originale tramite una funzione. Quando passi un puntatore a una funzione, la funzione può usare l'operatore di dereferenziazione per modificare il valore memorizzato a quell'indirizzo di memoria.
All'interno della funzione, dereferenzi il puntatore usando l'operatore * per accedere al valore della variabile originale e modificarlo. Questa tecnica si chiama passaggio per riferimento perché passi un riferimento alla posizione della variabile in memoria.
void doubleValue(int *ptr) {
*ptr = *ptr * 2; // Desreferencia para modificar el valor original
}
int main() {
int x = 5;
doubleValue(&x); // Pasa la dirección de x
// ¡x ahora es 10!
return 0;
}La chiave è usare *ptr sul lato sinistro dell'assegnazione per modificare il valore all'indirizzo di memoria contenuto nel puntatore. Questo consente alle funzioni di modificare in modo permanente le variabili della funzione chiamante, aprendo possibilità di programmazione potenti che il passaggio per valore semplicemente non può offrire.
Sfida
FacileScrivi un programma C che dimostri come modificare le variabili tramite puntatori creando una funzione che triplica il valore di un intero.
Il programma dovrebbe:
- Creare una funzione denominata
tripleValueche accetta un puntatore a un intero come parametro - All'interno della funzione
tripleValue, usare l'operatore di dereferenziazione per moltiplicare per 3 il valore all'indirizzo di memoria - All'interno della funzione
tripleValue, stampare il nuovo valore nel formato:Value tripled to: [value] - Nella funzione
main, dichiarare una variabile intera denominatanumbere inizializzarla con il valore 8 - Stampare il valore originale nel formato:
Original value: [value] - Chiamare la funzione
tripleValuee passare l'indirizzo della variabilenumberusando l'operatore indirizzo - Dopo la chiamata alla funzione, stampare il valore finale di
numbernel formato:Final value: [value]
L'output dovrebbe dimostrare che la funzione modifica correttamente la variabile originale tramite il puntatore:
Original value: 8
Value tripled to: 24
Final value: 24Questa sfida dimostra la potenza del passaggio per riferimento usando i puntatori: la funzione può modificare permanentemente la variabile originale dereferenziando il puntatore e cambiando il valore in quella posizione di memoria.
Provalo tu
#include <stdio.h>
// TODO: Scrivi qui la tua funzione tripleValue
int main() {
// TODO: Scrivi qui il tuo codice
// Dichiara e inizializza la variabile number
// Stampa il valore originale
// Chiama la funzione tripleValue
// Stampa il valore finale
return 0;
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Fondamenti dei puntatori
Che cos’è un puntatore?Dichiarare i puntatoriL’operatore di indirizzo (&)L’operatore di dereferenziazione (*)Puntatori NULLRiepilogo: nozioni di base sui puntatori4Progetto: Utility di testo semplice
Panoramica del progettoConteggio dei caratteri2Puntatori e array
I nomi degli array come puntatoriElementi degli array e puntatoriAritmetica dei puntatoriConfrontare i puntatoriRiepilogo: attraversamento di un array con i puntatori5Puntatori e funzioni
Passaggio per valorePassare puntatori alle funzioniModificare le variabili tramite puntatoriUn esempio classico: scambiare valoriPassare array alle funzioniRiepilogo: argomenti puntatore nelle funzioni3Array di caratteri e stringhe
Stringhe come array di charIl terminatore nullInput di stringhe con scanfUso di strlen()Uso di strcpy()Uso di strcat()Uso di strcmp()Riepilogo: funzioni di base per le stringhe6Gestione della memoria
Memoria Stack vs. HeapAllocazione dinamica - malloc()Usare sizeof() per l'allocazioneVerificare il fallimento dell'allocazioneLiberare la memoria con free()Allocare con calloc()Riepilogo: array dinamico9Progetto: Inserimento semplice di un contatto
Progetto: Definire una struct ContattoFunzione per creare un contattoEsercitati da solo: Compilatore C online