Você está na página 1de 2

www.tiexpert.

net

Pg. 1 de 2

Ponteiros de vetor
Como j visto at agora, ponteiros so variveis que guardam o endereo de memria de outra varivel. Veremos agora, como se aplica este recurso em vetores. Recapitulando o que so vetores: variveis de endereo continuo na memria. Ou seja, enquanto uma varivel do tipo int ocupa, por exemplo, um bloco de memria, um vetor de 5 posies do tipo int ocupa 5 blocos de memria. Para acessarmos cada item de um vetor usamos os ndices que ficam entre colchetes ([]). H duas formas de trabalhar com ponteiros para vetor. 1. Usar ndices no ponteiro como se ele fosse um vetor: ponteiro = vetor; ponteiro[indice1] = qualquer valor para ser gravado nesse ndice; ponteiro[indiceN] = qualquer valor para ser gravado nesse ndice; Preste ateno no seguinte detalhe. Apesar de ser ponteiro, ao atribuirmos um valor ao ndice no usamos o sinal de dereferncia (*). #include <stdio.h> #include <stdlib.h> int main (void){ int vetor [2]; int *v; // ponteiro v = vetor; v[0] = 123; v[1] = 456; printf ("vetor[0] = %d\n", vetor[0]); printf ("vetor[1] = %d\n\n", vetor[1]); system ("pause"); } 2. Usar o que chamamos de aritmtica de ponteiros. Aritmtica de ponteiros consiste em modificar o valor do ponteiro para ele indicar o prximo endereo de memria do vetor. Exemplificando, seria algo como: ponteiro = endereo do ndice 0 do vetor; *(ponteiro+indice1) = qualquer valor para ser gravado nesse ndice; *(ponteiro+indiceN) = qualquer valor para ser gravado nesse ndice; Perceba que aqui atribuimos um valor ao vetor usando um dereferenciador do ponteiro (*). Quando somamos um nmero ao ponteiro, o que estamos fazendo , na verdade, somar o nmero necessrio de bytes para o prximo endereo. Ex.: Se tivermos um ponteiro para um vetor de inteiro, quando formos calcular o terceiro espao faremos *(ponteiro+3). Internamente ser calculado o seguinte -> ponteiro + 3 o tamanho de int (4 bytes). Ento, 3 4 = 12 bytes. ponteiro = 0x00001100; ponteiro + 12 bytes; novo ponteiro = 0x00001100C; Apesar de ser uma conta simples, no precisamos nos preocupar com isso. Porque o prprio sistema cuida de executar este clculo.

http://www.tiexpert.net/programacao/c/ponteiro-vetor.php

www.tiexpert.net
#include <stdio.h> #include <stdlib.h> #define MAX 10

Pg. 2 de 2

int main (void){ int vetor [MAX], i, valor, *v; v = &vetor[0]; printf ("Digite um valor para ser gravado no\n"); printf ("indice\tEndereco de Memoria\n"); for (i=0; i<MAX; i++) { printf ("[%d]\t%p\t\t-> ", i, (v+i)); scanf ("%d", &valor); getchar(); *(v+i) = valor; //valor gravado no endereo apontado pelo ponteiro } system ("cls"); printf ("Os valores gravados no vetor foram:\n"); for (i=0; i<MAX; i++) { printf("vetor[%d], ponteiro (%p) = %d\n", i, (v+i), vetor[i]); } system ("pause"); }
Autor: Denys William Xavier Este artigo est sob Licena Creative Commons Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-sa/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, California 94105, USA.

http://www.tiexpert.net/programacao/c/ponteiro-vetor.php

Você também pode gostar