Sie sind auf Seite 1von 2

www.tiexpert.

net

Pg. 1 de 2

Ponteiros como Argumento de Funes


Vimos at agora, qual a importncia dos ponteiros, como utiliz-los e principalmente qual sua sintaxe. Agora, comearemos a tratar de ponteiros em tpicos mais avanados, comeando com o uso de ponteiros como argumento de funes. Primeiramente, iremos entender qual a vantagem de usarmos ponteiros como argumentos. At agora, apenas havamos utilizado argumentos de valores. Os argumentos de valores so cpias dos valores dos dados passados a funo 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 varivel n para a funo mostrarNumero o valor de n copiado para nr. Ou seja, o valor que est sendo manipulado dentro da funo no o valor original, mas uma cpia. Isso nos impossibilita de acessar a varivel diretamente, fazendo com que muitas vezes tenhamos que forar nossa funo retornar algum valor. O problema est quando criamos uma funo que afeta diretamente vrias partes da memria. Neste caso, no possvel apenas retornarmos um valor para ser tratado novamente dentro do corpo do programa. Abaixo esta um exemplo muito simples, mas que simplesmente no 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 idia da funo acima passar o valor de uma varivel para outra. Mas, ao executarmos este cdigo, percebemos que ao final os valores de var1 e var2 continuam os mesmos. Por qu? Simples. O que foi trocado dentro da funo trocar foi a cpia dos valores de var1 e http://www.tiexpert.net/programacao/c/ponteiro-como-argumento-de-funcao.php

www.tiexpert.net

Pg. 2 de 2

var2 que so a e b dentro da funo. 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 no com as variveis que queramos. Mas, se ao invs de utilizarmos o valor da varivel, utilizssemos sua referncia de memria, ou seja, o seu ponteiro. Dessa forma, a funo saberia que o valor a ser tratado j existe e est exatamente no local da memria que indicarmos. Portanto, o valor que seria tratado dentro da funo no seria uma cpia, mas a varivel original. Ento, vamos reformular a funo do exemplo anterior usando a referncia dos ponteiros (endereos 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 endereo como forma de manipulao, e ento, conseguimos trocar os valores de var1 e var2, pois a funo no copiou os valores dessas variveis, ele manipulou diretamente seus endereos de memria. Aqui, podemos destacar mais uma vatangem que foi a economia de memria. Pois, no foi criado mais um espao de memria, j que ns utilizamos diretamente o endereo de memria j alocado anteriormente por var1 e var2.
Autor: Denys William Xavier Este artigo est sob Licena Creative Commons Para ver uma cpia desta licena, 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.

http://www.tiexpert.net/programacao/c/ponteiro-como-argumento-de-funcao.php

Das könnte Ihnen auch gefallen