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
|
Ponteiros de vetorComo 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 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; 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; 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; 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");
}
Páginas Relacionadas |
Enquete
|