Passaggio per valore
Fa parte della sezione Logica e flusso del percorso C di Coddy. Lezione 25 di 63.
Quando passi una variabile a una funzione in C, la funzione riceve una copia del valore di quella variabile, non la variabile stessa. Questo concetto fondamentale si chiama passaggio per valore.
Ecco cosa succede: se hai una variabile x con il valore 10 e la passi a una funzione, la funzione riceve una copia separata di quel valore. Le eventuali modifiche che la funzione apporta a questa copia non influiscono sulla variabile originale nella funzione chiamante.
void tryToChange(int num) {
num = 99; // Questo modifica solo la copia
}
int main() {
int x = 10;
tryToChange(x);
// x è ancora 10, non 99
return 0;
}Questo comportamento protegge i tuoi dati originali da modifiche accidentali da parte delle funzioni. Tuttavia, significa anche che, se vuoi che una funzione modifichi effettivamente il valore di una variabile, il passaggio per valore non funzionerà. Comprendere questa limitazione è fondamentale per proseguire e imparare i puntatori e come possono risolvere questo problema.
Sfida
FacileScrivi un programma in C che dimostri il concetto del passaggio per valore tentando di modificare una variabile all'interno di una funzione e osservando che la variabile originale rimane invariata.
Il tuo programma dovrebbe:
- Creare una funzione chiamata
tryToModifyche accetta un parametro intero chiamatonumber - All'interno della funzione
tryToModify, aggiungere 50 al parametronumber - All'interno della funzione
tryToModify, stampare il valore modificato nel formato:Inside function: [value] - Nella funzione
main, dichiarare una variabile intera chiamataoriginale inizializzarla con il valore 25 - Stampare il valore originale prima di chiamare la funzione nel formato:
Before function call: [value] - Chiamare la funzione
tryToModifye passare la variabileoriginalcome argomento - Dopo la chiamata alla funzione, stampare di nuovo il valore di
originalnel formato:After function call: [value]
Il tuo output dovrebbe dimostrare che il valore della variabile originale rimane invariato nonostante la modifica all'interno della funzione:
Before function call: 25
Inside function: 75
After function call: 25Questa sfida dimostra il concetto fondamentale del passaggio per valore in C, in cui le funzioni ricevono copie delle variabili anziché le variabili stesse. Qualsiasi modifica apportata al parametro all'interno della funzione non influisce sulla variabile originale nella funzione chiamante.
Provalo tu
#include <stdio.h>
// TODO: Scrivi qui la tua funzione tryToModify
int main() {
// TODO: Scrivi qui il tuo codice
// 1. Dichiara e inizializza la variabile originale
// 2. Stampa il valore prima della chiamata alla funzione
// 3. Chiama la funzione tryToModify
// 4. Stampa il valore dopo la chiamata alla funzione
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