Ligando Ponteiros com Arrays e Travessia Direta
Nesta etapa, estabeleceremos a conexão entre nosso ponteiro e o array e, em seguida, usaremos o ponteiro para percorrer o array na direção para frente.
Conectando um Ponteiro a um Array
Em C, o nome de um array sem um índice representa o endereço do primeiro elemento do array. Isso significa que podemos atribuir este endereço diretamente a uma variável ponteiro.
Vamos modificar nosso arquivo main.c para vincular o ponteiro ao array e percorrê-lo:
#include <stdio.h>
int main() {
printf("Array Traversal using Pointers\n\n");
// Declare and initialize an array of 5 integers
int arr[5] = {10, 20, 30, 40, 50};
// Declare a pointer of integer type
int *ptr;
// Assign the address of the first element of the array to the pointer
ptr = arr; // This is equivalent to ptr = &arr[0]
// Print the array elements using array notation
printf("Array elements using array notation:\n");
for(int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
// Print the array elements using pointer notation
printf("\nArray elements using pointer notation (forward traversal):\n");
for(int i = 0; i < 5; i++) {
printf("*(ptr + %d) = %d\n", i, *(ptr + i));
}
return 0;
}
Neste código atualizado:
- Atribuímos o endereço do primeiro elemento do array
arr ao ponteiro ptr.
- Adicionamos um novo loop que percorre o array usando aritmética de ponteiros.
- A expressão
*(ptr + i) acessa o valor no local de memória ptr + i. Quando i é 0, este é o primeiro elemento do array; quando i é 1, é o segundo elemento e assim por diante.
Compile e execute o programa para ver os resultados:
gcc main.c -o main
./main
Você deve ver a seguinte saída:
Array Traversal using Pointers
Array elements using array notation:
arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50
Array elements using pointer notation (forward traversal):
*(ptr + 0) = 10
*(ptr + 1) = 20
*(ptr + 2) = 30
*(ptr + 3) = 40
*(ptr + 4) = 50
Observe que ambos os métodos produzem a mesma saída. Isso demonstra que a aritmética de ponteiros pode ser usada para acessar elementos de array, assim como a indexação tradicional de array.