Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Relation entre les tableaux et les pointeurs

Relation entre les tableaux et les pointeurs

Dans ce didacticiel, vous découvrirez la relation entre les tableaux et les pointeurs en programmation C. Vous apprendrez également à accéder aux éléments du tableau à l'aide de pointeurs.

Avant d'en savoir plus sur la relation entre les tableaux et les pointeurs, assurez-vous de consulter ces deux rubriques :

Relation entre les tableaux et les pointeurs

Un tableau est un bloc de données séquentielles. Écrivons un programme pour imprimer les adresses des éléments du tableau.

#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;
}

Sortie

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

Il y a une différence de 4 octets entre deux éléments consécutifs du tableau x . C'est parce que la taille de int est de 4 octets (sur notre compilateur).

Notez que l'adresse de &x[0] et x est le même. C'est parce que le nom de la variable x pointe vers le premier élément du tableau.

De l'exemple ci-dessus, il est clair que &x[0] est équivalent à x . Et, x[0] est équivalent à *x .

De même,

  • &x[1] est équivalent à x+1 et x[1] est équivalent à *(x+1) .
  • &x[2] est équivalent à x+2 et x[2] est équivalent à *(x+2) .
  • ...
  • En gros, &x[i] est équivalent à x+i et x[i] est équivalent à *(x+i) .

Exemple 1 :pointeurs et tableaux

#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;
}

Lorsque vous exécutez le programme, la sortie sera :

Enter 6 numbers: 2
3
4
4
12
4
Sum = 29 

Ici, nous avons déclaré un tableau x de 6 éléments. Pour accéder aux éléments du tableau, nous avons utilisé des pointeurs.

Dans la plupart des contextes, les noms de tableau se décomposent en pointeurs. En termes simples, les noms de tableaux sont convertis en pointeurs. C'est la raison pour laquelle vous pouvez utiliser des pointeurs pour accéder aux éléments des tableaux. Cependant, vous devez vous rappeler que les pointeurs et les tableaux ne sont pas les mêmes .

Il existe quelques cas où les noms de tableaux ne se désintègrent pas en pointeurs. Pour en savoir plus, consultez :Quand le nom du tableau ne se désintègre-t-il pas en un pointeur ?

Exemple 2 :tableaux et pointeurs

#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;
}

Lorsque vous exécutez le programme, la sortie sera :

*ptr = 3 
*(ptr+1) = 4 
*(ptr-1) = 2

Dans cet exemple, &x[2] , l'adresse du troisième élément, est assignée au ptr aiguille. Par conséquent, 3 était affiché lorsque nous avons imprimé *ptr .

Et, en imprimant *(ptr+1) nous donne le quatrième élément. De même, l'impression de *(ptr-1) nous donne le deuxième élément.


Langue C

  1. Quelle est la relation entre le Big Data et le cloud computing ?
  2. Adresses et pointeurs C Pass
  3. Structures C et pointeurs
  4. La relation entre la tension et le courant dans les moteurs électriques
  5. La relation entre l'IoT et l'Edge Computing
  6. Différences entre SCADA et IHM
  7. La différence entre les moteurs à courant continu et à courant alternatif
  8. Différence entre le brasage et le soudage
  9. Différence entre les moteurs 2 temps et 4 temps