TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Ponteiros

Resenha: Ponteiros. Pesquise 862.000+ trabalhos acadêmicos

Por:   •  25/5/2014  •  Resenha  •  1.063 Palavras (5 Páginas)  •  338 Visualizações

Página 1 de 5

Etapa 3

Passo 2

Os conceitos de endereço e ponteiro são fundamentais em qualquer linguagem de programação (embora sejam mais visíveis em C que em outras linguagens). O conceito de ponteiro é muito útil mas difícil; seu domínio exige um certo esforço.

Endereços

A memória de qualquer computador é uma sequência de bytes. Cada byte armazena um de 256 possíveis valores. Os bytes são numerados sequencialmente. O número de um byte é o seu endereço (= address).

Cada objeto na memória do computador ocupa um certo número de bytes consecutivos. No meu computador, um char ocupa 1 byte, um int ocupa 4 bytes e um double ocupa 8 bytes

Cada objeto na memória do computador tem um endereço. Na maioria dos computadores, o endereço de um objeto é o endereço do seu primeiro byte. Por exemplo, depois das declarações

char c;

int i;

struct {

int x, y;

} ponto;

int v[4];

os endereços das variáveis poderiam ser

c 89421

i 89422

ponto 89426

v[0] 89434

v[1] 89438

v[2] 89442

(o exemplo é fictício). O endereço de uma variável é dado pelo operador &. (Não confunda esse uso de "&" com o operador lógico and, que em C se escreve "&&".) Se i é uma variável então &i é o seu endereço. No exemplo acima, &i vale 89422 e &v[3] vale 89446.

Exemplo: O segundo argumento da função de biblioteca scanf é o endereço da posição na memória onde devem ser depositados os objetos lidos no dispositivo padrão de entrada:

int i;

scanf( "%d", &i);

Ponteiros

Um ponteiro (= apontador = pointer) é um tipo especial de variável que armazena endereços. Um ponteiro pode ter o valor especial

NULL

que não é o endereço de lugar algum. A constante NULL está definida no arquivo-interface stdlib e seu valor é 0 na maioria dos computadores.

Se um ponteiro p armazena o endereço de uma variável i, podemos dizer "p aponta para i" ou "p é o endereço de i" (querendo dizer "o ponteiro p aponta para i" no primeiro caso e "o valor de p é o endereço de i" no segundo). Se um ponteiro p tem valor diferente de NULL então

*p

é o valor do objeto apontado por p. (Não confunda esse uso de "*" com o operador de multiplicação!) Por exemplo, se i é uma variável e p é igual a &i então dizer "*p" é o mesmo que dizer "i".

Figura esquerda: um ponteiro p, armazenado no endereço 90001, contém o endereço de um inteiro. Figura direita: representação esquemática da situação.

Há vários tipos de ponteiros: ponteiros para caracteres, ponteiros para inteiros, ponteiros para ponteiros para inteiros, ponteiros para registros etc. O computador faz questão de saber de que tipo de ponteiro você está falando. Para declarar um ponteiro p para um inteiro, diga

int *p;

Para declarar um ponteiro p para um registro cel, diga

struct cel *p;

Um ponteiro r para um ponteiro que apontará um inteiro é declarado assim:

int **r;

Exemplos

Suponha que a, b e c são variáveis inteiras. Eis um jeito bobo de fazer "c = a+b":

int *p; /* p é um ponteiro para um inteiro */

int *q;

p = &a; /* o valor de p é o endereço de a */

q = &b; /* q aponta para b */

c = *p + *q;

Outro exemplo bobo:

int *p;

int **r; /* r é um ponteiro para um ponteiro para um inteiro */

p = &a; /* p aponta para a */

r

...

Baixar como (para membros premium)  txt (5.4 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com