Como passar ponteiros para funções em c ++
Um dos usos de variáveis de ponteiro em C ++ é de passagem argumentos para funções. Para entender por que isso é importante, você precisa entender como argumentos são passados para uma função.
Conteúdo
Passando pelo valor em C ++
Por padrão, os argumentos são passados para funções por valor. Isto tem o resultado de certa forma surpreendente que a mudança do valor de uma variável em uma função normalmente não alterar o seu valor na função de chamada. Considere o seguinte segmento exemplo de código:
Video: Ponteiros em C/C++: Aula 3 - Ponteiros para funções e ponteiros para ponteiros
fn void (int nArg) {nArg = 10 - // valor de nArg neste momento é 10} pai (void) {int n1 = 0-fn (n1) - // valor de n1, neste ponto ainda é 0}
Aqui o pai () função inicializa o número inteiro variável n1 como 0. O valor de n1 é então passado para fn (). Ao entrar na função, nArg é igual a 0, o valor passado. fn () altera o valor do nArg a 10 antes de voltar a pai (). Ao voltar para pai (), o valor de n1 ainda é 0.
A razão para este comportamento é que C ++ não passar uma variável a uma função. Em vez disso, C ++ passa o valor contido na variável no momento da chamada. Ou seja, a expressão é avaliada, mesmo que seja apenas um nome de variável, eo resultado é passado.
No exemplo, o valor de n1, que é 0, foi passado para fn (). Que a função faz com que o valor não tem efeito sobre n1.
Passando valores de ponteiro em C ++
Como qualquer outro tipo intrínseca, um ponteiro pode ser transmitido como um argumento de uma função de:
fn vazio (int * pnArg) {* pnArg = 10-} pai (void) {int n = 0-fn (&n) - // este passa o endereço de i // agora o valor de n é 10}
Neste caso, o endereço do n é passado para a função fn () em vez do valor de n. O significado desta diferença é aparente quando você considerar a atribuição dentro fn ().
supor n está localizado na 0x100 endereço. Ao invés do valor 10, a chamada fn (&n) passa o valor 0x100. Dentro fn (), A atribuição *pnArg = 10 armazena o valor 10 no int variável localizado na localização 0x100, assim, substituindo o valor 0. Ao voltar para pai (), o valor de n 10 é porque n é apenas outro nome para 0x100.
Passar por referência em C ++
C ++ fornece um atalho para passagem de argumentos por endereço - um atalho que permite evitar ter de preocupar-se com ponteiros. A declaração a seguir cria uma variável n1 e uma segunda referência à mesma n1 mas com um novo nome, nREF:
int n1 - // declarar um variableint int& Nref = N1 - // declarar uma segunda referência a n1nRef = 1- // agora aceder a referência // tem o mesmo efeito que n1 aceder - // n1 é agora igual a 1
Uma variável de referência como nREF deve ser inicializado quando é declarada porque cada vez subseqüente que seu nome é usado, C ++ irá assumir que você quer dizer a variável que nREF refere-se a.
variáveis de referência encontram a sua principal aplicação em chamadas de função:
fn void (int& rnArg) // declarar argumento de referência {rnArg = 10 - // alterar o valor da variável ...} //...that rnArg refere pai tovoid (void) {int n1 = 0-fn (n1) - // passar uma referência a // n1 aqui o valor de n1 é 10}
Isso é chamado passando por referência. A declaração int& rnArg declara rnArg a ser uma referência a um argumento inteiro. o fn () função armazena o valor 10 para o int local referenciado por rnArg.
Video: Programar em C - Ponteiros à Estruturas - Aula 63
Passando pela referência é o mesmo que passar o endereço de uma variável. A sintaxe de referência coloca o ônus sobre C ++ para aplicar o “endereço de” operador de referência em vez de exigir que o programador para fazer isso.
Você não pode sobrecarregar um passe pela função de valor com a sua passagem pelo equivalente de referência. Assim, você não pode definir as duas funções fn (int) e fn (int&) no mesmo programa. C ++ não sabe qual a chamada.