English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

C++ Tutorial Básico

C++ Controle de fluxo

C++ função

C++ Array & string

C++ Estrutura de dados

C++ Classe & objeto

C++ ponteiro

C++ herança

C++ Tutorial STL

C++ Manual de Referência

C++ ponteiros e funções

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.

Exemplo1:passagem de referência sem ponteiros

#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.

Exemplo2:uso de ponteiros para passar referências

#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.