ponteiros
Um ponteiro é uma variável que contém, um endereço de memória. Esse endereço é normalmente a posição de uma outra variável na memória.
Endereço na memória Variável na memória
Declaração de Ponteiros
Tipo *nome onde: Tipo é qualquer tipo válido de variável em C (int , char ,....) nome é o nome da variável ponteiro.
Operadores de Ponteiros * e &
O & é um operador unário que devolve o endereço na memória do seu operando. O * é um operador unário que devolve o valor da variável localizada no endereço.
Ex.: int *p; int count = 100; int y;
p = &count; /* p - ponteiro tem o endereço de count, suponha 2000 */
y = *p ;/* coloca o valor de count em y. y terá o valor 100 porque 100 estava armazenado na posição 2000 . y recebe o valor que está no endereço count */
Endereço na memória Variável na memória
Atribuição de Ponteiros
Como qualquer variável, um ponteiro pode ser usado em atribuições . Ex.1: #include <stdio.h> void main (void)
{
int x= 10; int *p1 , *p2; p1= &x; p2= p1; printf("%d\n",p2); /* imprime o endereço de x */ printf("%d\n",*p2); /* imprime o valor que o ponteiro p2 aponta */
}
Aritmética de Ponteiro
Existem duas operações aritméticas, adição e subtração. Toda a aritmética de ponteiro é feita relativamente ao tipo base do ponteiro.
Ex.2: int x = 10; /* tipo int = 2 bytes */ int *p1 , *p2; p1=&x; /* Suponha 2000 */ p1++;
Endereço de memória Variável na memória
Se fizer: p1--; Ponteiro passa apontar para a posição 1998.
Ex.3: char *ch = 3000; int *i = 3000 Ex.4: p1=p1+12;
Adição e subtração
Só é válido para ponteiros e um inteiro, nenhuma outra operação aritmética pode ser efetuada com ponteiros.
Comparação de Ponteiros
É possível comparar dois ponteiros em uma expressão relacional.
Ex.1: int *p,*q; if(p<q) printf("p aponta para uma memória mais baixa que q\n");
Comparações de ponteiros são usadas quando dois