|
20 - Ponteiros
Sabemos que quando criamos uma variável, um espaço da memória é reservado para nosso programa.
Usaremos variáveis do tipo ponteiro para saber que espaço de memória é este.
Ponteiros são muito utilizados em jogos para deixar o jogo com uma boa performace.
Não se confunda com exemplos exagerados de ponteiros em outros sites, vamos manter o básico.
- Praticamente ponteiros são utilizados para referênciar memória e criar novas variáveis em tempo de execução.
- Criar memória em tempo de execução do jogo é uma tarefa complicada, por isso preste muita atenção ao utilizar ponteiros.
|
|
VOCÊ PRECISA
SABER...
Criar memória em tempo de execução do jogo ( ou programa ) é conhecido como alocação dinâmica de memória |
|
Declaramos ponteiros da seguinte forma
doube *numero1;
int *numero2;
Cada variável que está sendo declarada como um ponteiro deve ser precedida de um *.
Assim sendo numero1 é um ponteiro para um double e numero2 é um ponteiro para um inteiro.
Os ponteiros podem ser inicializados com 0 ou NULL. NULL é o mesmo que 0, é uma constante definida em iostream.
O valor 0 é o único valor inteiro que pode ser atribuído diretamente a uma variável ponteiro, é mais aconselhavel usar 0 do que NULL.
O &, ou operador de endereço, é um operador unário que retorna o endereço de seu operando. É com ele que atribuimos os valores aos ponteiros.
VOCÊ PRECISA
SABER...
& ( endereço da memória ) pode retornar o endereço da memória de uma variavel.
O valor de uma variável ponteiro sempre vai ser um endereço de memória. |
|
int y = 5;
int *Py;
Py = &y;
Diz-se então, que a variável Py aponta para y.
Ao imprimir o ponteiro temos o valor real de y.
cout << *Py << endl;
Observação: O ponteiro derreferenciado(*) também pode ser usado do lado esquerdo de um comando.
*Py = 9; // atribui 9 a y
Ponteiros podem ser usados em funções, estas operações são conhecidas como chamando funções por referência.
Neste exemplo elevamos ao cubo uma variável usando uma chamada por referência com o ponteiro como argumento
CÓDIGO...
#include <iostream>
using std::cout;
using std::endl;
void cubo( int * );
int main()
{
int numero = 5;
cout << "O valor original de numero eh " << numero;
cubo( &numero );
cout << "\nO novo valor de numero eh " << numero << endl;
std::cin;
return 0;
}
void cubo ( int *Pn )
{
*Pn = *Pn * *Pn * *Pn; // não confunda o sinal aritmético com o ponteiro
}
FIM DE CÓDIGO...
DICA
Ao longo de nosso aprendizado você vai perceber que na maioria das vezes os ponteiros são usados como argumentos de funções.
Isso acontece por que, em uma boa engenharia de softwere é melhor passar apenas um ponteiro para uma função do que uma grande quantidade de dados.
|
|
Contribuidor
Adriano Waltrick
13/06/2007
|