Buscar

Aula 05 e 06 - Ponteiro 1.1_dmc

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Programação II
Unidade 2 – Alocação Dinâmica de Memória
parte 1.1
Universidade Federal de Santa Catarina
Campus Araranguá
Daniel Cruz
UFSC - ARARANGUÁ
1
1
Podemos entender a memória de um computador como um conjunto de células que armazenam informações.
Cada célula da memória possui um endereço (número inteiro de 32 bits). 
UFSC - ARARANGUÁ
2
Memória do Computador
Quando criamos em nosso programa uma variável de um determinado tipo, o Sistema Operacional, ao executar o nosso programa reserva uma posição de memória.
Mas ao invés de utilizarmos o endereço da variável como referência, fazemos uso do identificador (nome) que atribuímos a variável.
UFSC - ARARANGUÁ
3
Memória do Computador
Ponteiros são a ferramenta mais poderosa oferecida pela linguagem C 
Ponteiros são tipos de dados que referenciam (ou “apontam” para) endereços de memória. 
Em algumas linguagens com maior abstração, ponteiros não existem expostos ao programador (como em Java) ou tem alternativas mais seguras em outros tipos de dados (como o tipo “referência” em C++).
UFSC - ARARANGUÁ
4
Ponteiro
Ponteiros são utilizados em situações em que o uso do nome de uma variável não é permitido ou é indesejável.
Fornecem maneiras com as quais as funções podem realmente modificar os argumentos que recebem (passagem por referência); 
Passar matrizes e strings mais convenientemente de uma função para outra (usá-los no lugar de matrizes); 
Manipular os elementos de matrizes mais facilmente por meio da movimentação de ponteiros, no lugar de índices entre colchetes; 
Criar estruturas de dados complexas, como listas encadeadas e árvores binárias, em que um item deve conter referências a outro; 
Alocar e desalocar memória dinamicamente do sistema; 
Passar para uma função o endereço de outra função. 
UFSC - ARARANGUÁ
5
Por que os ponteiros são usados? 
O que são ponteiros? 
Ponteiros ou Apontadores são tipos de variáveis que armazenam endereços de memória, possivelmente, endereços de memória de outras variáveis.
O nome de uma variável indica o que está armazenado nela.
O endereço de uma variável é um ponteiro. 
Seu valor indica em que parte da memória do computador a variável está alocada.
Ponteiros proporcionam um modo de acesso à variável sem referenciá-la diretamente (modo indireto de acesso) 
UFSC - ARARANGUÁ
6
Ponteiro
A sintaxe para declarar um ponteiro, é, em C:
	tipo *ponteiroDeTipo;
	
Como qualquer outro tipo, podemos ter vetores de ponteiros:
	tipo *vetorDePonteiros[tamanho];
E, como um ponteiro é um tipo, podemos ter ponteiros para ponteiros (ad infinitum):
	tipo **ponteiroDePonteiroDeTipo;
	tipo ***ponteiroDePonteiroDePonteiroDeTipo;
UFSC - ARARANGUÁ
7
Ponteiros - Definição
7
Para declararmos um ponteiro, basta utilizar o operador *(asterisco) antes do nome da variável.
Exemplo:
				int *p;
Ponteiros são tipados, ou seja, devem ter seu tipo declarado e somente podem apontar para variáveis do mesmo tipo.
UFSC - ARARANGUÁ
8
Declaração de Ponteiros
8
Para trabalharmos com ponteiros, C disponibiliza os seguintes operadores:
& - Fornece o endereço de memória onde está armazenado uma variável. Lê-se “o endereço de”.
Utilizado para obter o endereço de uma variável.
* - Valor armazenado na variável referenciada por um ponteiro. Lê-se “o valor apontado por”.
Pode se comportar de duas maneiras:
Quando usado na declaração indica que a variável será um ponteiro.
Quando usado na manipulação das variáveis retorna o conteúdo do ponteiro é utilizado para obter o conteúdo do endereço apontado.
UFSC - ARARANGUÁ
9
Operadores para Ponteiros
9
Exemplos:
int *ptr, nota = 10;
ptr = &nota;
nota = *ptr;
Declarações das variáveis
int m - m guarda um inteiro
float n - n guarda um ponto flutuante
int *x - x é um ponteiro para um inteiro
float *y - y é um ponteiro para um ponto flutuante
UFSC - ARARANGUÁ
10
Exemplo
Exemplo:
int a = 1;1000 1001 1002 1003
UFSC - ARARANGUÁ
11
Ponteiros em Linguagem C
1
Variável
Posição
a
1000
Exemplo:
int a = 1;1000 1001 1002 1003
int *pt_a;
UFSC - ARARANGUÁ
12
Ponteiros em Linguagem C
1
Variável
Posição
a
1000
pt_a
1001
Exemplo:
int a = 1;1000 1001 1002 1003
int *pt_a;
pt_a = &a;
UFSC - ARARANGUÁ
13
Ponteiros em Linguagem C
1
1000
Variável
Posição
a
1000
pt_a
1001
Exemplo
UFSC - ARARANGUÁ
14
Ponteiro
Ponteiro
UFSC - ARARANGUÁ
15
Exemplo:
	int *pn, c;
	c=7;
	pn=&c;	
7
c
pn
7
O & (e comercial) é um operador que retorna o endereço de seu operando. A representação em memória do ponteiro fica da seguinte maneira:	
7
c
0002
pn
0002
1500
Ponteiro
UFSC - ARARANGUÁ
17
Declaração de Ponteiros
Para conhecer o endereço ocupado por uma variável, usamos o operador de endereço & 
O resultado da operação é um ponteiro constante 
Eis um pequeno programa que mostra o seu uso 
UFSC - ARARANGUÁ
18
Ponteiros constantes e o operador &
UFSC - ARARANGUÁ
19
Exemplos 1
19
UFSC - ARARANGUÁ
20
Exemplos 2
20
UFSC - ARARANGUÁ
21
Exemplo 3
Exemplo 4
UFSC - ARARANGUÁ
22
Exemplo 5
Exemplo 6

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando