English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá sobre a relação entre array e ponteiro na programação C. Você também aprenderá a usar ponteiros para acessar elementos do array.
Antes de entender a relação entre array e ponteiro, certifique-se de verificar os seguintes dois tópicos:
um bloco de dados sequenciais. Vamos escrever um programa para imprimir os endereços dos 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 de resultados
&x[0] = 1450734448 &x[1]= 1450734452 &x[2]= 1450734456 &x[3]= 1450734460 o endereço do array x: 1450734448
o espaço entre os elementos contíguos do array x4bytes. Isso porque o tamanho do int é4bytes (no nosso compilador).
Atenção, o endereço &x[0] é o mesmo que x. Isso porque o nome da variável x aponta para o primeiro elemento do array.
Daqui para frente, &x[0] é equivalente a x. E x[0] é equivalente a*x.
Da mesma forma,
&x[1] é equivalente a x+1 e x[1] é equivalente a*(x+1);
&x[2] é equivalente a x+2 e x[2] é equivalente a*(x+2);
...
Basicamente &x[i] é equivalente a x+i e x[i] são equivalentes*(x+i).
#include <stdio.h> int main() { int i, x[6], soma = 0; printf("input6números: "); for(i = 0; i < 6; ++i) { // equivalente a scanf("%d", &x[i]); scanf("%d", x+i); // equivalente a sum += x[i] soma += *(x+i); } printf("soma = %d", sum); return 0; }
Executar o programa, a saída é:
input6números: 2 3 4 4 12 4 soma = 29
Aqui, declaramos um array contendo6um array de elementos inteiros x. Para acessar os elementos do array, usamos ponteiros.
Na maioria dos casos, o nome do array se decompõe em ponteiros. Em resumo, o nome do array se torna um ponteiro. É por isso que você pode usar ponteiros para acessar elementos do array. Mas, você deve lembrar quePonteiro e array não são a mesma coisa.
Em alguns casos, o nome do array não se decompõe em ponteiros.
#include <stdio.h> int main() { int x[5]= {1, 2, 3, 4, 5}; int* ptr; //ptr foi alocado no endereço do terceiro elemento ptr = &x[2]; printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(ptr+1)); // 4 printf("*(ptr-1) = %d", *(ptr-1)); // 2 return 0; }
Executar o programa, a saída é:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
Neste exemplo, o endereço do terceiro elemento &x [2] Alocado ao ponteiro ptr. Portanto, ao imprimir* ptr mostra3.
E, saída*(ptr+1) Obter o quarto elemento. Similarmente, saída*(tr-1Obter o segundo elemento.