Quando passamos um ponteiro como um parâmetro para um método, passamos uma cópia do ponteiro para o método, ou podemos dizer que passar o ponteiro é o valor que passa do ponteiro. O editor do Canal de Erro do New Technology explicará os detalhes da diferença entre referências e ponteiros no C ++. Venha e dê uma olhada!
Explicação detalhada da diferença entre referência e ponteiro em C ++
As referências são introduzidas no C ++ e não existem em C. Para entender o conceito de citação, você deve primeiro entender a definição de variáveis e a diferença entre referências e variáveis. Existem dois elementos de variáveis: nome e espaço.
Uma referência não é uma variável, é apenas um alias para uma variável e não possui espaço independente. Ele atende apenas ao elemento "nome" da variável, e o elemento "espaço" não é satisfeito. Em outras palavras, uma referência precisa compartilhar o mesmo espaço de memória que a variável que ela faz referência, e a alteração na referência é realmente uma modificação para a variável referenciada. E as referências devem ser inicializadas quando definidas.
O tipo de passagem de parâmetro e pontos relacionados:
1 Passe por valor: o valor do parâmetro formal não pode ser modificado. O parâmetro real precisa inicializar o parâmetro formal e o espaço precisa ser alocado e copiar o conteúdo do parâmetro real no parâmetro formal.
2 PASSE DE REFERÊNCIA: Não há necessidade de alocar espaço quando o parâmetro real é inicializado.
3 Passagem do ponteiro: em essência, ele ainda é passado por valor. Quando o parâmetro real é inicializado, o espaço ainda precisa ser alocado. Se você precisar modificar o endereço do ponteiro, simplesmente passá -lo com um ponteiro não é possível. Você deve usar ** ou *&
A seguir, estão os conteúdos relevantes citados:
1 Conceito de citação
2 citações const
3 referência passante como parâmetro
4 Referência como Valor de Retorno da Função
5. A diferença entre referência e ponteiro
1 Conceito de citação
Basta ter os seguintes pontos -chave em mente:
(1) Referência é um alias para variáveis e não há espaço independente
(2) A referência precisa ser compartilhada com as variáveis que referencia
(3) Alterações em uma referência são realmente alterações nas variáveis que ela faz referência
(4) as referências precisam ser inicializadas ao definir
(5) Depois que a referência é inicializada, outras variáveis não podem ser recitadas.
Veja o seguinte exemplo:
int main (void) {int val = 100; // int & refval; <span style = "white-space: pré"> </span> // erro, a referência deve ser inicializada int & refval = val; cout << "val =" << val << endl; refval = 200; <span style = "white-space: pré"> </span> // Na verdade, a variável Val foi alterada cout << "val =" << val << endl; int val2 = 500; refval = val2; <span style = "espaço branco: pré"> </span> // Isso não significa que a variável Val2 seja referenciada a Val2, // apenas significa atribuir Val2 a refval, isto é, val. cout << "val =" << val << endl; retornar 0; }2 citações const
Os pontos -chave da citação const são os seguintes:
(1) Como o nome indica, uma referência const é uma referência a um objeto const.
(2) Uma referência const pode se referir a um objeto que não é consultoso, mas uma referência não consaginada não pode se referir a um objeto const. Veja o seguinte exemplo de função.
int a = 200; const int & ref = a; // ok const int b = 100; int & ref2 = b; //Erro,
(3) O valor do objeto referenciado por const é uma constante e não pode ser modificado.
const int a = 200; const int & ref = a; ref = 100; // erro, o objeto referenciado é uma constante e não pode ser modificado
(4) Uma referência const pode se referir a variáveis de diferentes tipos, mas produzirá uma variável temporária. do seguinte modo:
duplo a = 3,14; const int & ref = a; // ok, o processo que gera é: // int tmp = a; Gere a variável temporária TMP e os dados podem ser truncados. // const int & ref = tmp; a referência é realmente uma variável temporária
3 referência passante como parâmetro
Passar uma referência como parâmetro é um dos parâmetros. Ele não precisa alocar espaço de memória quando o parâmetro real for inicializado. Aqui está um exemplo:
Void Swap (int & a, int & b) {int tmp = a; a = b; b = tmp; } int main () {int x = 20; int y = 30; troca (x, y); cout << x << endl; // x = 30; cout << y << endl; // y = 20; }4 Referência como Valor de Retorno da Função
Primeiro liste os exemplos, como segue:
int a [] = {1,2,3,4,5,6,7,8,9,0}; int & index (int i) {return a [i]; } int main () {index (3) = 100; cout << a [3] << endl; // saída: 100}Esta é outra função das referências, onde a função pode ser colocada à esquerda do operador de atribuição. A função de índice retorna a referência de um []. As alterações na referência modificarão a própria alteração; portanto, um [3] é modificado em 100.
5. A diferença entre referência e ponteiro
(1) A referência de acesso é acesso direto e o ponteiro de acesso é acesso indireto.
(2) A referência é um alias para variáveis. Ele não aloca seu próprio espaço de memória separadamente, mas o ponteiro tem seu próprio espaço de memória
(3) Depois que a referência é inicializada, nenhuma outra variável pode ser referenciada, mas o ponteiro pode
(4) Use referências o máximo possível e use ponteiros sempre que precisar.
Obrigado por ler e explicar as diferenças entre referências e ponteiros em C ++ em detalhes. Espero que possa ajudá -lo. Obrigado pelo seu apoio da New Technology Channel Network!