Programação
 › Algoritmo  › C/C++  › Java
Web
 › HTML/XHTML  › JavaScript  › PHP
Sistema Operacional
 › Comandos de DOS  › Windows  › Linux  › Mac/BSD
Office
 › Word / Writer  › Excel / Calc
Áreas do Site
 › Download  › Fórum  › Blog
Recomendamos
Computadores e Informática em Lisboa
TI Expert » Programação » C/C++ » Ponteiro de Vetor

Ponteiros de vetor

Como já visto até agora, ponteiros são variáveis que guardam o endereço de memória de outra variável. Veremos agora, como se aplica este recurso em vetores.

Recapitulando o que são vetores: variáveis de endereço continuo na memória. Ou seja, enquanto uma variável do tipo int ocupa, por exemplo, um bloco de memória, um vetor de 5 posições do tipo int ocupa 5 blocos de memória.

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 atenção no seguinte detalhe. Apesar de ser ponteiro, ao atribuirmos um valor ao índice não usamos o sinal de dereferência (*).

#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 aritmética de ponteiros.

Aritmética de ponteiros consiste em modificar o valor do ponteiro para ele indicar o próximo endereço de memória do vetor.

Exemplificando, seria algo como:

ponteiro = endereço 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 número ao ponteiro, o que estamos fazendo é, na verdade, somar o número necessário de bytes para o próximo endereço.

Ex.: Se tivermos um ponteiro para um vetor de inteiro, quando formos calcular o terceiro espaço faremos *(ponteiro+3). Internamente será calculado o seguinte -> ponteiro + 3 × o tamanho de int (4 bytes). Então, 3 × 4 = 12 bytes.

ponteiro = 0x00001100;
ponteiro + 12 bytes;
novo ponteiro = 0x00001100C;

Apesar de ser uma conta simples, não precisamos nos preocupar com isso. Porque o próprio sistema cuida de executar este cálculo.

#include <stdio.h>
#include <stdlib.h>
   
#define MAX 10

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 endereço 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");
}
Faça o Download deste Código

Creative Commons License
Autor: Denys William Xavier
Este artigo está sob Licença Creative Commons.

Faça o download da versão em PDF Indique nosso site Gostou?
Indique nosso site!
Este artigo foi
lido 61071 vezes
Bookmark e Compartilhe

Páginas Relacionadas

Enquete
O Google Chrome OS irá desbancar o Microsoft Windows 7?
» ProgramaçãoAlgorítmo | C/C++ | Java

» WebHTML/XHTML | JavaScript | PHP

» Sistema OperacionalComandos de DOS | Windows | Linux | Mac/BSD

» OfficeWord/Wirter | Excel/Calc

» Áreas do SiteDownloads | Fórum | Blog