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
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
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
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; }
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione