Programar em C/Ponteiros: diferenças entre revisões
[edição não verificada] | [edição não verificada] |
Conteúdo apagado Conteúdo adicionado
Linha 185:
Quando uma função recebe como parâmetros os endereços e não os valores das variáveis, dizemos que estamos a fazer uma '''chamada por referência'''; é o caso desse último exemplo. Quando passamos diretamente os valores das variáveis para uma função, dizemos que é uma '''chamada por valor'''; foi o caso do segundo exemplo.
==
Em C, os elementos de um vetor são sempre guardados seqüencialmente, a uma distância fixa um do outro. Com isso, é possível facilmente passar de um elemento a outro, percorrendo sempre uma mesma distância para frente ou para trás na memória. Dessa maneira, podemos usar ponteiros e a aritmética de ponteiros para percorrer vetores. Na verdade, vetores ''são'' ponteiros ― um uso particular dos ponteiros. Acompanhe o exemplo a seguir.
#include <
int main ()
{
int
int
printf("%p\n", vetorTeste);
printf("%p\n", ptr);
for (int i = 0; i < MAX; i++)▼
printf("%p\n", &ptr);
{▼
printf("O endereço do índice %d do vetor é %p\n", i, &ptr[i]);
printf("O valor do índice %d do vetor é %d\n", i, ptr[i]);
return 0;▼
▲ return 0;
}
*(testScore +1);▼
iPtr[1];▼
*(iPtr+1)▼
Começamos declarando um vetor com três elementos; depois, criamos um ponteiro para esse vetor. Mas repare que '''não colocamos o operador de endereço''' em vetorTeste; fazemos isso porque um vetor já representa um endereço, como você pode verificar pelo resultado da primeira chamada a printf().
Como você já viu anteriormente neste capítulo, podemos usar a sintaxe <code>*(ptr + 1)</code> para acessar o inteiro seguinte ao apontado pelo ponteiro ''ptr''. Mas, se o ponteiro aponta para o vetor, o próximo inteiro na memória será o próximo elemento do vetor! De fato, em C as duas formas <code>*(ptr + ''n'')</code> e <code>ptr[''n'']</code> são equivalentes.
Não é necessário criar um ponteiro para usar essa sintaxe; como já vimos, o vetor em si já é um ponteiro, de modo que qualquer operação com ''ptr'' será feita igualmente com ''vetorTeste''. Todas as formas abaixo de acessar o segundo elemento do vetor são equivalentes:
vetorTeste[1];
Repara ainda na seguinte possibilidade: atribuir o valor de um ponteiro a outro (depois de declarados, e iniciado)
Linha 251 ⟶ 244:
* *(p+5)
conteúdo do ponteiro 5 posições adiante (curto e grosso :)
== Comparando endereços ==
|