Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Passaggio degli argomenti per valore/puntatore/riferimento | Specifica degli Argomenti di Funzione
Funzioni in C++

Passaggio degli argomenti per valore/puntatore/riferimento

Scorri per mostrare il menu

Passaggio per valore

Le variabili create all'interno di una funzione sono accessibili solo all'interno di quella funzione. Questa regola si applica anche quando si passano argomenti. I parametri nella firma della funzione hanno ambito locale e vengono passati per valore, il che significa che i loro valori vengono copiati nella funzione e memorizzati in variabili separate (proprio come prendere in prestito un libro dalla biblioteca invece di prendere l'originale).

main.cpp

main.cpp

1234567891011121314151617181920
#include <iostream> // Function that takes an argument by value void modify(int num) { // Modify the parameter (local copy of the argument) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass 'number' by value modify(number); // Varibale in the main function remains unchanged std::cout << "After function call: " << number << std::endl; }

Passaggio per puntatore

Passare argomenti per valore non è sempre efficiente. Copiare i valori utilizza memoria aggiuntiva e a volte una funzione deve modificare direttamente la variabile originale. In questi casi, è meglio passare la variabile per puntatore, cioè inviare il suo indirizzo di memoria invece del suo valore. Questo si fa utilizzando l'operatore puntatore (*) nei parametri della funzione.

main.cpp

main.cpp

1234567891011121314151617181920212223
#include <iostream> // Function that takes an argument using pointer void modify(int* p_num) { // Modify the value at the memory address pointed by `p_num` // '*' is used to extract the value from the address (pointer) *p_num = (*p_num) * 2; std::cout << "Inside function: " << *p_num << std::endl; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass the address of 'number' using a pointer // '&' is used to get an address of the variable modify(&number); // 'number' in the main function is modified through the pointer std::cout << "After function call: " << number << std::endl; }

Passaggio per riferimento

Il passaggio per riferimento consiste nel fornire a una funzione l'accesso diretto alla memoria di una variabile, permettendole di modificarne il valore originale senza utilizzare l'operatore di dereferenziazione (*).

Il passaggio per riferimento utilizza l'operatore & nei parametri della funzione. Funziona in modo simile al passaggio per puntatore, ma con due differenze principali:

  • Non è necessario usare * per accedere alla variabile all'interno della funzione.
  • Non è necessario usare & quando si richiama la funzione, solo nella sua dichiarazione.
main.cpp

main.cpp

1234567891011121314151617181920
#include <iostream> // Function that takes an argument by reference void modify(int& num) { // Modify the parameter directly (no need for dereferencing) num = num * 2; } int main() { int number = 5; std::cout << "Before function call: " << number << std::endl; // Call the function and pass `number` by reference modify(number); // `number` in the main function is modified directly through the reference std::cout << "After function call: " << number << std::endl; }
question mark

Quale affermazione descrive meglio la differenza tra passaggio per valore, puntatore e riferimento?

Seleziona la risposta corretta

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 2

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Sezione 2. Capitolo 2
some-alt