Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

Relação entre arrays e ponteiros

Relação entre matrizes e ponteiros


Neste tutorial, você aprenderá sobre a relação entre arrays e ponteiros na 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 verificar estes dois tópicos:

Relação entre matrizes e ponteiros


Um array é um bloco de dados sequenciais. Vamos escrever um programa para imprimir endereços de elementos de 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("Address of array x: %p", x);

   return 0;
}

Saída
&x[0] = 1450734448
&x[1] = 1450734452
&x[2] = 1450734456
&x[3] = 1450734460
Address of array x: 1450734448

Há uma diferença de 4 bytes entre dois elementos consecutivos do array 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, fica claro que &x[0] é equivalente a x . E, x[0] é equivalente a *x .

De forma similar,
  • &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] é equivalente a *(x+i) .

Exemplo 1:ponteiros e matrizes

#include <stdio.h>
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;
}

Ao executar o programa, a saída será:
Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 



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


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

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

Exemplo 2:matrizes e ponteiros

#include <stdio.h>
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 \n", *ptr);   // 3
  printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
  printf("*(ptr-1) = %d", *(ptr-1));  // 2

  return 0;
}

Ao executar 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 ptr ponteiro. Portanto, 3 foi exibido quando imprimimos *ptr .

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

Linguagem C

  1. Qual é a relação entre big data e computação em nuvem?
  2. Ponteiros e matrizes C++
  3. Endereços e ponteiros de passagem C
  4. Estruturas e ponteiros C
  5. A relação entre tensão e corrente em motores elétricos
  6. A relação entre IoT e computação de borda
  7. Diferenças entre SCADA e HMI
  8. A diferença entre motores CC e CA
  9. Diferença entre brasagem e solda
  10. Diferença entre motores 2 tempos e 4 tempos