English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial Básico de Linguagem C

Controle de Fluxo de Linguagem C

Funções C

Matrizes C

Ponteiros C

Strings C

Estruturas de Linguagem C

Arquivos de Linguagem C

Outros C

Manual de Referência do Linguagem C

Ponteiros e Matrizes C

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:

a relação entre array e ponteiro

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).

示例1:指针和数组

#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.

示例2:数组和指针

#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.