Boneco-no-computador.jpgAgora sabemos que o nome de um vetor é um ponteiro constante. Sabemos também que podemos indexar o nome de um vetor. Como consequência podemos também indexar um ponteiro qualquer. O programa mostrado a seguir funciona perfeitamente:

[clearboth]

[toggle title=”Programa”]

#include 
main ()
{
int matrx [10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int *p;
p=matrx;
printf ("O terceiro elemento do vetor e: %dn",p[2]);
system("pause");
}

Programa 34 no C

Podemos ver que p[2] é equivalente a *(p+2).

[/toggle]
[toggle title=”Strings”]

Seguindo o raciocínio acima, os nomes de strings, são do tipo char*. Isto permite-nos escever a nossa função StrCpy(), que funcionará como a função strcpy() da biblioteca:

#include 
#include 
StrCpy (char *destino,char *origem)
{
while (*origem)
{
*destino=*origem;
origem++;
destino++;
}
*destino='';
} main ()
{
char str1[100],str2[100],str3[100];
printf ("Entre com uma string: ");
gets (str1);
StrCpy (str2,str1);
StrCpy (str3,"Voce digitou a string ");
printf ("nn%s%sn",str3,str2);
system("pause");
}

Programa 35 no C

Há vários aspetos a destacar no programa acima. Observe que podemos passar ponteiros como argumentos de funções. Na verdade é assim que funções como gets() e strcpy() funcionam. Ao passar o ponteiro você está a possibilitar que a função altere o conteúdo das strings. Você já estava a passar os ponteiros e não sabia. No comando while (*origem) estamos a utilizar o fato da string terminar com ” como critério de parada. Quando fazemos origem++ e destino++ o leitor poderia argumentar que estamos a alterar o valor do ponteiro-base da string, contradizendo o que recomendei que se deveria fazer. O que você não deve saber ainda (e será estudado em detalhe mais adiante) é que, no C, são passados para as funções cópias dos argumentos. Desta forma, quando alteramos o ponteiro origem na função StrCpy() o ponteiro str2 permanece inalterado na função main().

[/toggle]
[toggle title=”Endereços de elementos de vetores”]

A  notação:

&nome_da_variável[índice];

É válida e retorna o endereço do ponto do vetor indexado por índice. Isto seria equivalente a nome_da_variável + indice. É interessante notar que, como consequência, o ponteiro nome_da_variável tem o endereço &nome_da_variável[0], que indica onde está guardado na memória o valor do primeiro elemento do vetor.

[/toggle]
[toggle title=”Vetores de ponteiros”]

Podemos construir vetores de ponteiros como declaramos vetores de qualquer outro tipo. Uma declaração de um vetor de ponteiros inteiros poderia ser, por exemplo:

int *pmatrx [10];

No caso acima, pmatrx é um vetor que armazena 10 ponteiros para inteiros.

[/toggle]

Gostou do tutorial? Então deixe um comentário abaixo!

Anúncios