Relation entre les tableaux et les pointeurs dans la programmation C (avec des exemples)

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 vérifier ces deux rubriques:

  • Tableaux C
  • Pointeurs C

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

Production

 & x (0) = 1450734448 & x (1) = 1450734452 & x (2) = 1450734456 & x (3) = 1450734460 Adresse de la baie x: 1450734448 

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

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

D'après l'exemple ci-dessus, il est clair que cela &x(0)équivaut à x. Et, x(0)équivaut à *x.

De même,

  • &x(1)équivaut à x+1et x(1)équivaut à *(x+1).
  • &x(2)équivaut à x+2et x(2)équivaut à *(x+2).
  • Fondamentalement, &x(i)équivaut à x+iet x(i)équivaut à *(x+i).

Exemple 1: pointeurs et tableaux

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

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

 Entrez 6 chiffres: 2 3 4 4 12 4 Somme = 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 tableaux se désintègrent 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 à des éléments de 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, visitez: Quand le nom du tableau ne se désintègre-t-il pas en pointeur?

Exemple 2: tableaux et pointeurs

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

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 affectée au pointeur ptr. Par conséquent, a 3été affiché lorsque nous avons imprimé *ptr.

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

Articles intéressants...