Entendendo a Relação Entre Arrays e Ponteiros em C
Relação Entre Arrays e Ponteiros
Neste tutorial, você aprenderá sobre a relação entre arrays e ponteiros em programação C. Você também aprenderá a acessar elementos de array usando ponteiros.
Antes de aprender sobre a relação entre arrays e ponteiros, certifique-se de conferir estes dois tópicos:
- Arrays em C
- Ponteiros em C
Relação Entre Arrays e Ponteiros
Um array é um bloco de dados sequencial. Vamos escrever um programa para imprimir endereços de elementos do array.
#include <stdio.h> int main() { int x[4]; int i; for(i = 0; i < 4; ++i) { printf("&x[%d] = %p\n", i, &x[i]); } printf("Endereço do array x: %p", x); return 0; }
Saída
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Endereço do array x: 1450734448
Há uma diferença de 4 bytes entre dois elementos consecutivos do array x. É porque o tamanho de int é 4 bytes (no nosso compilador).
Observe que, o endereço de &x[0] e x é o mesmo. É porque o nome da variável x aponta para o primeiro elemento do array.

Do exemplo acima, fica claro que &x[0] é equivalente a x. E, x[0] é equivalente a *x.
Similarmente,
&x[1]é equivalente ax+1ex[1]é equivalente a*(x+1).&x[2]é equivalente ax+2ex[2]é equivalente a*(x+2).- ...
- Basicamente,
&x[i]é equivalente ax+iex[i]é equivalente a*(x+i).
Exemplo 1: Ponteiros e Arrays
#include <stdio.h> int main() { int i, x[6], sum = 0; printf("Digite 6 números: "); for(i = 0; i < 6; ++i) { // Equivalente a scanf("%d", &x[i]); scanf("%d", x+i); // Equivalente a sum += x[i] sum += *(x+i); } printf("Soma = %d", sum); return 0; }
Quando você executa o programa, a saída será:
Digite 6 números: 2 3 4 4 12 4 Soma = 29
Aqui, declaramos um array x de 6 elementos. Para acessar elementos do array, usamos ponteiros.
Na maioria dos contextos, nomes de array decaem para ponteiros. Em palavras simples, nomes de array são convertidos para ponteiros. É por isso que você pode usar ponteiros para acessar elementos de arrays. No entanto, você deve lembrar que ponteiros e arrays não são a mesma coisa.
Existem alguns casos onde nomes de array não decaem para ponteiros. Para saber mais, visite: Quando o nome do array não decai em um ponteiro?
Exemplo 2: Arrays e Ponteiros
#include <stdio.h> int main() { int x[5] = {1, 2, 3, 4, 5}; int* ptr; // ptr recebe o endereço do terceiro elemento ptr = &x[2]; printf("*ptr = %d \n", *ptr); // 3 printf("*(ptr+1) = %d \n", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; }
Quando você executa o programa, a saída será:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
Neste exemplo, &x[2], o endereço do terceiro elemento, é atribuído ao ponteiro ptr. Portanto, 3 foi exibido quando imprimimos *ptr.
E, imprimir *(ptr+1) nos dá o quarto elemento. Similarmente, imprimir *(ptr-1) nos dá o segundo elemento.
Linguagem C
- Big Data e Computação em Nuvem: Como Eles Trabalham Juntos
- Ponteiros e Arrays em C++: Dominando a Relação
- Programação C: Passando Endereços e Ponteiros para Funções – Guia Prático
- Dominando Structs e Ponteiros em C: Guia Prático
- Entendendo Desequilíbrio Tensão-Corrente em Motores Elétricos: Causas e Solução de Problemas
- Como IoT e Edge Computing Se Complementam
- SCADA vs. HMI: Diferenças-Chave e Papel na Indústria 4.0
- Entendendo Motores CC vs CA: Diferenças Principais e Guia de Compra
- Brasagem vs Solda Branda: Principais Diferenças Explicadas
- Motores 2 Tempos vs 4 Tempos: Diferenças Principais Explicadas