English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá a passar ponteiros como parâmetros para funções e usá-los eficazmente no programa.
emC ++funçãoNo artigo, você aprendeu sobre a passagem de parâmetros para funções. Porque foram passados valores reais, este método é chamado de passagem por valor.
mas há outra maneira de passar parâmetros para uma função, onde não são passados os valores reais dos parâmetros. Em vez disso, só é passado a referência ao valor.
#include <iostream> using namespace std; // 原型 da função void swap(int&, int&); int main() { int a = 11, b = 22; cout << "Antes da troca" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(a, b); cout << "\nDepois da troca" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int& n1, int& n2) { int temp; temp = n1; n1 = n2; n2 = temp; }
resultados de saída
Antes da troca a = 11 b = 22 Depois da troca a = 22 b = 11
na função main(), foram definidas duas variáveis inteiras a e b. Essas variáveis inteiras são passadas para a função swap() por referência.
o compilador pode identificar que é passado por referência, pois a definição da função é void swap(int& n1, int& n2) (Observe que o tipo de dados está após&símbolo).
na função swap() recebe apenas a referência (endereço) das variáveis a e b, e a troca ocorre no endereço original da variável.
na função swap(),n1e n2形式参数,实际上分别与变量a和b相同。
还存在另一种使用ponteirométodos para completar a mesma tarefa.
#include <iostream> using namespace std; // 原型 da função void swap(int*, int*); int main() { int a = 1, b = 2; cout << "Antes da troca" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; swap(&a, &b); cout << "\nDepois da troca" << endl; cout << "a = " << a << endl; cout << "b = " << b << endl; return 0; } void swap(int* n1, int* n2) { int temp; temp = *n1; *n1 = *n2; *n2 = temp; }
A saída deste exemplo é a mesma que a dos resultados anteriores.
Neste caso, o endereço da variável é passado durante a chamada da função, não a variável em si.
swap(&a, &b); // &a é o endereço de a, &b é o endereço de b
Devido ao fato de que são passados endereços em vez de valores, é necessário usar o operador de desreferência para acessar o valor armazenado no endereço.
void swap(int* n1, int* n2) { ... .. ... }
* n1e* n2fornece respectivamente armazenado no endereço n1e n2o valor no endereço n
Devido a n1que contém o endereço de a, portanto, para acessar* n1Qualquer coisa que fizer também mudará o valor de a no main() função. Da mesma forma, b terá o valor de* n2Mesmo valor.