Relação entre matrizes e ponteiros na programação C (com exemplos)

Neste tutorial, você aprenderá sobre a relação entre arrays e ponteiros na programação C. Você também aprenderá a acessar os elementos do array usando ponteiros.

Antes de aprender sobre a relação entre arrays e ponteiros, certifique-se de verificar estes dois tópicos:

  • Matrizes C
  • Ponteiros C

Relação entre matrizes e ponteiros

Uma matriz é um bloco de dados sequenciais. Vamos escrever um programa para imprimir endereços de elementos de array.

 #include int main() ( int x(4); int i; for(i = 0; i < 4; ++i) ( printf("&x(%d) = %p", i, &x(i)); ) printf("Address of array x: %p", x); return 0; ) 

Resultado

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Endereço da matriz x: 1450734448 

Há uma diferença de 4 bytes entre dois elementos consecutivos da matriz x. É porque o tamanho de inté de 4 bytes (em 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 da matriz.

A partir do exemplo acima, é claro que &x(0)é equivalente a x. E x(0)é equivalente a *x.

Similarmente,

  • &x(1)é equivalente a x+1e x(1)é equivalente a *(x+1).
  • &x(2)é equivalente a x+2e x(2)é equivalente a *(x+2).
  • Basicamente, &x(i)é equivalente a x+ie x(i)é equivalente a *(x+i).

Exemplo 1: ponteiros e matrizes

 #include int main() ( int i, x(6), sum = 0; printf("Enter 6 numbers: "); for(i = 0; i < 6; ++i) ( // Equivalent to scanf("%d", &x(i)); scanf("%d", x+i); // Equivalent to sum += x(i) sum += *(x+i); ) printf("Sum = %d", sum); return 0; ) 

Quando você executa o programa, a saída será:

 Insira 6 números: 2 3 4 4 12 4 Soma = 29 

Aqui, declaramos um array x de 6 elementos. Para acessar os elementos do array, usamos ponteiros.

Na maioria dos contextos, os nomes de array decaem para ponteiros. Em palavras simples, os nomes das matrizes são convertidos em ponteiros. Essa é a razão pela qual você pode usar ponteiros para acessar elementos de arrays. No entanto, você deve se lembrar que ponteiros e matrizes não são os mesmos .

Existem alguns casos em que nomes de array não se transformam em ponteiros. Para saber mais, visite: Quando o nome do array não se transforma em um ponteiro?

Exemplo 2: Arrays e ponteiros

 #include int main() ( int x(5) = (1, 2, 3, 4, 5); int* ptr; // ptr is assigned the address of the third element ptr = &x(2); printf("*ptr = %d ", *ptr); // 3 printf("*(ptr+1) = %d ", *(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, 3foi exibido quando imprimimos *ptr.

E a impressão *(ptr+1)nos dá o quarto elemento. Da mesma forma, a impressão *(ptr-1)nos dá o segundo elemento.

Artigos interessantes...