Gerenciamento de memória em C++ - Ponteiros

Propaganda
AULA 03 - Gerenciamento de Memória em C++ - Ponteiros
1
Ponteiros - Introdução
 Variáveis cujos valores são endereços de memória.



Sintaxe de declaração de ponteiros:
tipo_da_variavel * nome_ponteiro;
Exemplo:
int * p_int ; // declara a variável p_int como um ponteiro para inteiros


Sintaxe de atribuição de valores para variáveis ponteiros:
nome_ponteiro = &nome_da_variavel ;

Sintaxe de leitura do conteúdo da variável indica por um ponteiro:
 *ponteiro = nome_da_variavel ;
 Exemplo:
int * p_int , v_int;
// declara p_int : ponteiro para inteiros e v_int: inteiro
v_int = 5;
// atribui o valor 5 para v_int;
p_int = &v_int;
// atribui o endereço de v_int a p_int
cout << v_int;
// imprime o valor de v_int (5)
cout << *p_int;
// imprime o conteúdo da variável cujo endereço está
// armazenado em p_int
cout << &p_int;
// imprime o endereço do ponteiro p_int

Ponteiros ainda não inicializados possibilitam o acesso à endereços ocupados por
outros dados. Na declaração de um ponteiro, utilize a palavra reservada NULL para
indicar que ele não aponta para nenhum endereço.
float * p_float = NULL;
2
Ponteiros e Matrizes
 A criação de uma matriz cria implicitamente um ponteiro com o mesmo nome da matriz
e que aponta sempre para o endereço da primeira célula da matriz - ponteiro constante.
 Exemplo:
char palavra [15];
// declara a string palavra[15] e cria o ponteiro constante
// palavra que contém o endereço de palavra[0]
strcpy(palavra,"Objetos");
// strcpy copia a string objetos no endereço
//apontado pelo ponteiro palavra
// palavra=NULL
// Erro: palavra é um ponteiro constante
3
Ponteiros e Estruturas
tipo_estrutura * ponteiro;
ponteiro->membro_estrutura;
// declaração de ponteiro para estrutura
(*ponteiro).membro_estrutura;
// acesso aos membros de uma estrutura
// pelo ponteiro
1
4
Ponteiros para uma constante
 Apontadores cujo conteúdo é imutável
 Exemplo:
int main( )
{
const int x=1,y=2; // x e y são constantes
const int* pint=&x;
cout << *pint << endl;
*pint=3;
// cannot modify a const object
int* pnormal;
pnormal=&y; // Cannot convert 'const int *' to 'int *'.
// não permite atribuir um ponteiro normal para constante
int z=10;
// z não é constante
pint=&z;
*pint=5;
//cannot modify a const object
// não permite alterar o conteudo variável apontada ainda que esta
// não seja const. embora se possa altera-la diretamente
z=12;
cout << *pint << endl;
const char* string = "Eu sou uma constante !";
cout << string << endl;
*string="Hi World!";
// cannot modify a const object
string="Hi World!";
cout << string << endl;
getch();
return 0;
}
5
Ponteiros constantes
 Apontadores que não mudam o endereço apontado
 Exemplo:
int z=1,w=2;
int* const ptint=&z; // atente para a sintaxe
cout << *ptint << endl;
ptint=&w;
// cannot modify a const object
*ptint=3;
cout << *ptint << endl;
char* const pstring = "Eu sou uma constante !";
cout << pstring << endl;
pstring=string;
// cannot modify a const object
// pstring="Hi World!";
// cannot modify a const object
cout << pstring << endl;
2
6
Ponteiro constante para uma constante
 const char* const msg = "Eu e meu ponteiro somos constantes"
 Exemplo:
// ponteiro constante para constante
const int i=1, j=2;
const int * const pccint = & i ;
cout << *pccint << endl;
// imprime 1
*pccint=3;
// cannot modify a const object
pccint=&j;
// cannot modify a const object
char* mystr="Mensagem";
const char* const pccstr = "Eu sou uma constante !";
cout << pccstr << endl;
pccstr="Hi World!";
// cannot modify a const object
*mystr="Hi World!";
// cannot modify a const object
pccstr=mystr;
// cannot modify a const object
3
Download