quinta-feira, 21 de outubro de 2010

Vetores

O que são?
Vetores são variáveis, capazes de armazenar um ou mais valores de um determinado tipo.

Declaração
Vetores também são declarados na área de declaração de variáveis da seguinte maneira:
tipoDoVetor nomeDoVetor[númeroDeElementos];

O conceito parece bem simples, mas é um pouco mais complexo que isso. A variável declarada como um vetor, na verdade, não armazena nenhum valor do tipo int ou do tipo char. Isso pode parecer um pouco contraditório, mas tem uma boa explicação.

Quando você declara um vetor, é reservado na memória do seu computador espaço suficiente para ele, e dentro da variável declarada como um vetor é armazenado o endereço de memória inicial desse espaço. Dizemos que essa variável é um ponteiro para esse endereço de memória, mas esse é um conceito que só será abordado em progII, portanto não se prendam a essa parte, apenas tenham isso em mente.

Já que você não está aqui pra me fazer perguntas nesse momento, eu pergunto por você: "Peraí. Como eu faço pra acessar os elementos desse vetor então?"

Os elementos desse vetor são espertamente mapeados em C com índices que variam de 0 (primeiro elemento) e n-1 (último elemento), onde n é o número de elementos do seu vetor. Você faz referência a esses elementos da seguinte maneira.

nomeDoVetor[0] (primeiro elemento)
nomeDoVetor[1] (segundo elemento)
...
nomeDoVetor[n-2] (penúltimo elemento)
nomeDoVetor[n-1] (último elemento)

E é importante saber que se você fizer referência ao vetor, sem um índice, você estará pegando o endereço de memória do início do seu vetor, que, como já foi dito, é o que a variável guarda.

Pra quem não lembra, ou não sabe, a gente já usou endereços de memória antes, no scanf. Quando a gente digitava &nomeDaVariável o que a gente fazia era pegar o endereço da tal variável. Portanto, repare que para fazer um scanf da primeira posição do vetor basta, no scanf, nomeDoVetor ao invés de &nomeDoVetor. Imagine que tenhamos declarado um vetor notas[10] (10 posições), e veja um dos meios de fazer scanf dos valores desse vetor:

scanf("%d", notas); (scanf do primeiro elemento)
scanf("%d", notas+1); (scanf do segundo elemento)
...
scanf("%d", notas+8); (scanf do nono elemento)
scanf("%d", notas+9); (scanf do décimo elemento)

Repare que fazendo nomeDoVetor+índiceDoElemento você consegue diretamente o endereço de memória do elemento do determinado índice.

Mas e como pegar o VALOR armazenado em um determinado índice do vetor?
Para isso você faz o seguinte nomeDoVetor[índiceDoElemento]. Vamos supor que tenhamos um vetor de 5 posições com os seguintes valores {3, 6, 9}, se os seguintes comandos fossem digitados:

printf("%d\n", nomeDoVetor[0]);
printf("%d\n", nomeDoVetor[1]);
printf("%d\n", nomeDoVetor[2]);
printf("Fim :D\n");

A saída esperada seria:
3
6
9
Fim :D

Repare que ao usar nomeDoVetor[índiceDoVetor] você pode usar o & para pegar o endereço dele. Experimente fazer os scanf's dessa maneira também!

Repare também que é bem burro fazer scanf's da maneira que eu fiz. Se você tiver o mesmo vetor notas, mas agora com 1.000 posições, faria 1.000 scanf's? Espero fortemente que não, hahaha! Para isso aprendemos as estruturas de repetição. Veja o exemplo abaixo:

for(i = 0 ; i<1000 ; i++)
{
scanf("%d", &notas[i]); ou scanf("%d", notas+i);
}

Repare que seu i varia entre 0 e 999 nessa repetição, que são exatamente os índices do seu vetor.

Valeu galera,
Até a próxima!

Nenhum comentário:

Postar um comentário