Você está na página 1de 16

Ponteiros

Profº. Adailton Cruz


FACET/UFGD

1
Memória do Computador

Sequencia de bytes endereçaveis

0xAD03
0xAD04
00100011 0xAD05
Dados
01110000 0xAD06
endereços
0xAD07
0xAD08
0xAD09

2
Armazenando dados na memória

0xAD03
0xAD04
int a;
00100011 0xAD05
Dados
a = 9072; 01110000 0xAD06
endereços
0xAD07
0xAD08
0xAD09

3
Armazenando dados na memória

 Uma variável possui um endereço de memória


 Este endereço corresponde ao primeiro byte ocupado
por ela

0xAD03
0xAD04
int a;
00100011 0xAD05
Dados
a = 9072; 01110000 0xAD06
Endereço
0xAD07 de a
0xAD08
0xAD09
int ocupa dois bytes

4
Operador sizeof

sizeof - operador unário usado para determinar


o tamanho em bytes de qualquer tipo de dado.

0xAD03
0xAD04
int a;
00100011 0xAD05
Dados
a = 9072; 01110000 0xAD06
Endereço
0xAD07 de a
0xAD08
0xAD09
int ocupa dois bytes

5
Operador sizeof
sizeof - operador unário usado para determinar
o tamanho em bytes de qualquer tipo de dado.
Ponteiro
Uma variável pode ser localizada:
• diretamente  usando seu identificador, ou
• indiretamente  usando seu endereço.

O endereço de uma variável é um apontador para


essa variável, ou simplesmente ponteiro.

0xAD03
0xAD04
00100011 0xAD05
01110000 0xAD06
0xAD07 Ponteiro
0xAD08 para
0xAD09 variável a

7
Manipulando Ponteiros

Para que um ponteiro seja útil é preciso


armazenar o seu valor.

Faz-se isto usando uma variável.


 Da mesma forma como armazena-se valores
inteiros, reais,...
 Assim como existe variável do tipo int, float,...,
também tem-se variável do tipo ponteiro.

8
Declaração de Ponteiros

O tipo informa o tamanho Nome do ponteiro para


da variável apontada referência

Tipo apontado * identificador da variável;

indica que a variável que está


sendo declarada é do tipo ponteiro

9
Declaração de Ponteiros Exemplo

ponteiro para uma


variável do tipo int

0xAD03

int a; 0xAD04
Int *Ptr; 00100011 0xAD05 a
01110000 0xAD06
a = 9072;
0xAD07 aPtr
0xAD08
0xAD09

10
Operador de endereço &

O operador & pode ser usado para capturar o


endereço de uma variável.

11
Inicialização de Ponteiros

0xAD03

int a; 0xAD04
Int *Ptr = &a; 00100011 0xAD05 a
01110000 0xAD06
a = 9072;
0xAD05 0xAD07 aPtr
0xAD08
0xAD09

Um ponteiro pode ser


inicializado da mesma
forma que outros tipos
de variáveis.

12
Ponteiro nulo
Inicialização de Ponteiros
um ponteiro deve sempre ser inicializado antes de ser usado

Ponteiros podem ser inicializados com valor 0 ou NULL

C interpreta NULL como um endereço para lugar nenhum

Definida no arquivo de cabeçalho


<stdlib.h>
exemplo

Macro NULL Int *Ptr = NULL;


#define NULL 0 If (Ptr == NULL){}

13
Conversão de Ponteiro

um ponteiro pode ser atribuído a outro ponteiro se eles


forem do mesmo tipo

Para Ponteiros de tipos diferentes deve-se fazer uma


conversão explicita

exemplo

float F; Este tipo de conversão não é


int *ptr ; indicado. Embora o compilador
aceite poderá ser causa de erro
ptr=(int*)F;
qdo for executado

14
Ponteiro void

um ponteiro pode ser atribuído a outro ponteiro se eles


forem do mesmo tipo

Exceção: ponteiro para void Erro: usar o operador de


indireção com um ponteiro
void
exemplo

float F;
int *ptr ;
Não exige conversão (coerção).
ptr=F;

15
Operador de indireção *

Este operador permite acessar o conteúdo da


variável localizada em endereço.
O operador * é unário e tem como operando um
endereço.

Conteúdo da variável
apontado por ptr.

Valor da variável ptr.

16

Você também pode gostar