O endereo de uma varivel se obtm atravs de &variavel Seja x uma varivel definida como int;
O ponteiro (que guarda o endereo de x) px = &x Se px um ponteiro que guarda o endereo de X Endereo Se escreve &x
890 X
04/04/2013
Ponteiros
Se px = &x ento px aponta para a varivel x; Exemplos de erros utilizando &:
&5 est errado; &(x+1) est errado;
px = &x = 890
Ponteiros
Fazer px = &x; seguido de y = *px; o mesmo que y=x; Pointers podem aparecer em expresses. Vamos analisar cada um dos comandos abaixo:
y = *px + 1; (incrementa 1 em x e coloca em y) printf(%d\n, *px); (imprime x) d = sqrt ((double) *px); (calcula raiz x e pe em d) *px = 0; (faz x = 0) *px += 1; (faz x = x + 1) (*px)++; (faz x = x + 1) px = py; (faz x = y)
04/04/2013
Aplicao de pointers
Em algoritmos de classificao, comum a funo de trocar um valor pelo outro, chamada de swap; A chamada funo se efetua pelo comando swap (&a,&b); Os argumentos em C so passados by value e assim impede a manipulao das variveis; Por isto, so utilizados os endereos (&) para poder alterar o contedo de variveis;
swap (px, py) int *px, *py; { int temp; temp = *px; *px = *py; *py = temp; }
04/04/2013
Acesso ao vetor
A referncia a um vetor convertido pelo compilador como um ponteiro para o primeiro elemento. Assim,
pa = &a[0]; o mesmo que pa = a;
#include <stdio.h> #include <stdlib.h> #include <string.h> /*retorna o comprimento da string s */ int tamstr(s) char *s; /* ou char[]; */ { int n; for (n = 0; *s != '\0' ; s++) n++; return(n); } int main() { int tamanho; printf("O tamanho da string Hello World : %d\n", tamstr("Hello World")); system("pause"); return(0); }
Quando um vetor passado para uma funo, o que passado na verdade o ponteiro do primeiro elemento.
Strlen comentado
/* modelo de strlen */ int strlen2(s) char *s; { char *p = s; while (*p != '\0') p++; return (p-s); }
H 0 1 1 2
E 1 2 3
L 2 3 4
L 3 4 5
O 4 5 6
5 6 7
W 6 7 8
O 7 8 9
R 8 9
L D \0 9 10 10 11 12
10 11 12
04/04/2013
10
04/04/2013
11
12
04/04/2013
13
Contato
14