Sie sind auf Seite 1von 2
www.tiexpert.net Pág. 1 de 2

www.tiexpert.net

Pág. 1 de 2

Ponteiros como Argumento de Funções

Vimos até agora, qual a importância dos ponteiros, como utilizá-los e principalmente qual sua sintaxe.

Agora, começaremos a tratar de ponteiros em tópicos mais avançados, começando com o uso de ponteiros como argumento de funções.

Primeiramente, iremos entender qual a vantagem de usarmos ponteiros como argumentos.

Até agora, apenas havíamos utilizado argumentos de valores.

Os argumentos de valores são cópias dos valores dos dados passados a função em sua chamada.

Exemplo:

#include <iostream> using namespace std;

int mostrarNumero (int nr) { cout << nr << endl;

}

int main (void) { int n = 10; mostrarNumero(n); system("pause");

}

No exemplo acima, quando passamos a variável n para a função mostrarNumero o valor de n

é copiado para nr. Ou seja, o valor que está sendo manipulado dentro da função não é o valor original, mas uma cópia.

Isso nos impossibilita de acessar a variável diretamente, fazendo com que muitas vezes tenhamos que forçar nossa função retornar algum valor.

O problema está quando criamos uma função que afeta diretamente várias partes da

memória. Neste caso, não é possível apenas retornarmos um valor para ser tratado novamente dentro do corpo do programa.

Abaixo esta um exemplo muito simples, mas que simplesmente não atende a nossas expectativas.

#include <iostream> using namespace std;

int trocar (int a, int b) { int aux; aux = a;

 

a = b;

b = aux;

}

int main (void) { int var1 = 10, var2 = 50; trocar (var1, var2); cout << "O valor de var1 e " << var1 << endl; cout << "O valor de var2 e " << var2 << endl; system("pause");

}

A

idéia da função acima é passar o valor de uma variável para outra. Mas, ao executarmos

este código, percebemos que ao final os valores de var1 e var2 continuam os mesmos.

Por quê? Simples. O que foi trocado dentro da função trocar foi a cópia dos valores de var1 e

www.tiexpert.net Pág. 2 de 2

www.tiexpert.net

Pág. 2 de 2

var2 que são a e b dentro da função. Ou seja, o que foi alterado na verdade foi o valor de a que passou para b e b que passou para a.

A troca aconteceu, mas não com as variáveis que queríamos.

Mas, se ao invés de utilizarmos o valor da variável, utilizássemos sua referência de memória, ou seja, o seu ponteiro.

Dessa forma, a função saberia que o valor a ser tratado já existe e está exatamente no local da memória que indicarmos. Portanto, o valor que seria tratado dentro da função não seria uma cópia, mas a variável original.

Então, vamos reformular a função do exemplo anterior usando a referência dos ponteiros (endereços contidos nos ponteiros) como argumentos dessa vez.

#include <iostream> using namespace std;

int trocar (int &a, int &b) { int aux; aux = a;

a = b;

b = aux;

}

int main (void) { int var1 = 10, var2 = 50; trocar (var1, var2); cout << "O valor de var1 e " << var1 << endl; cout << "O valor de var2 e " << var2 << endl; system("pause");

}

Neste caso, usamos o endereço como forma de manipulação, e então, conseguimos trocar os valores de var1 e var2, pois a função não copiou os valores dessas variáveis, ele manipulou diretamente seus endereços de memória.

Aqui, podemos destacar mais uma vatangem que foi a economia de memória. Pois, não foi criado mais um espaço de memória, já que nós utilizamos diretamente o endereço de memória já alocado anteriormente por var1 e var2.

Autor: Denys William Xavier Este artigo está sob Licença Creative Commons Para ver uma cópia
Autor: Denys William Xavier Este artigo está sob Licença Creative Commons Para ver uma cópia
Autor: Denys William Xavier Este artigo está sob Licença Creative Commons Para ver uma cópia

Autor: Denys William Xavier Este artigo está sob Licença Creative Commons Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-nc-sa/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.