Beruflich Dokumente
Kultur Dokumente
BÁSICA
AULA 14
Ponteiros ou
Apontadores
Endereços ou
100 101 102 103 104 105 106 107 108 109 110 111 posições de
memória
Suponha que a variável idade seja do tipo long int que tem seu
tamanho de 4 bytes (por definição), onde o nome da variável aponta
para o primeiro byte. O endereço de idade é 102.
Não importa qual o endereço de cada variável, mas que elas pos-
suem endereço e que a quantidade certa de memória é reservada.
A quantidade certa é identificada pela sua declaração e o
compilador encarrega-se da atribuição do efetivo endereço.
Ponteiro ou Apontador
Toda variável possui um endereço inicial de memória e você
pode armazena-lo em um ponteiro, mesmo sem conhece-lo.
Suponha que as variáveis idade e p_idade tenham sido declaradas
da seguinte forma:
int idade = 20; // variável inteira sendo inicializada com valor 20
int *p_idade = 0; // ponteiro nulo (sendo inicializado com 0)
p_idade = &idade; // atribui o endereço de idade a p_idade
100 101 102 103 104 105 106 107 108 109 110 111 posição do endereço
Ponteiro ou Apontador
DECLARAÇÃO DE PONTEIROS
Qualquer tipo de ponteiro pode apontar para
qualquer posição na memória, no entanto, toda a
aritmética de ponteiro é feita por meio do seu tipo de
dado, também denominado tipo base. Logo, é
fundamental a declaração correta do tipo base do
ponteiro para sua posterior manipulação.
<tipo de dado> * <identificador>;
Operador de indireção
tipo de dado = qualquer tipo válido em C, inclusive os
definidos pelo usuário.
identificador = nome da variável ponteiro
O tipo base do ponteiro define que tipo de variáveis o
ponteiro pode apontar.
Ponteiro ou Apontador
OPERADORES
• OPERADOR & (endereço)
É um operador unário que devolve o endereço de
memória de seu operando (variável ou função).
• OPERADOR * (indireto)
É um operador unário que devolve o valor da variável
localizada no endereço que se aponta. É o complemento
de &. Este operador precedendo o nome do ponteiro
resulta no valor da variável apontada
Estes operadores tem uma precedência maior do que todos
os operadores aritméticos, exceto o menos unário
(negativo).
Ponteiro ou Apontador
Os operadores de endereço e de indireção tem maior
precedência que qualquer operador aritmético exceto sobre
os operadores unários (negativo e positivo).
int main (void)
{ // Declarações
long int val, novo, *p; // define 3 variáveis, sendo 1 ponteiro
// Instruções
val = 30; // atribui a val o valor 30
p = &val; // atribui a p o endereço de memória val
novo = *p; /* atribui a novo o conteúdo do endereço
apontado por p (o mesmo que novo=val) */
*p = 50; // atribui ao endereço apontado por p o
return 0; // valor 50 ou simplesmente val = 50
}
Ponteiro ou Apontador
Como um ponteiro é uma variável as atribuições são
realizadas como qualquer variável comum. Representação
Exemplo: ? x
Previna-se
#include <stdio.h> Seja um adepto da computação p
#include <conio.h> segura: inicialize seus ponteiros! ? x
Exemplo:
float *p_a, *p_b;
p_a = (float *) 5000;
p_b = (float *) 4000;
printf("Diferenca entre os ponteiros = %d\n", p_a – p_b);