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

C Language Basic Tutorial

Contrôle de flux du langage C

Fonctions en C

Tableaux en C

Pointeurs en C

Chains de caractères en C

Structure de langage C

Fichier de langage C

Autres C

Manuel de référence du langage C

Pointeurs et tableaux en C

Dans ce tutoriel, vous découvrirez la relation entre le tableau et le pointeur dans la programmation en C. Vous apprendrez également à accéder aux éléments d'un tableau à l'aide d'un pointeur.

Avant de comprendre la relation entre le tableau et le pointeur, assurez-vous de vérifier les deux sujets suivants :

La relation entre le tableau et le pointeur

Un tableau est un bloc de données ordonné. Écrivons un programme pour imprimer l'adresse 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("L'adresse du tableau x : %p", x);
   return 0;
}

Résultat de la sortie

&x[0] = 1450734448
&x[1]= 1450734452
&x[2]= 1450734456
&x[3]= 1450734460
L'adresse du tableau x est : 1450734448

Les éléments continus du tableau x se différencient par4octets. C'est parce que la taille de int est4octets (dans notre compilateur).

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

À partir de l'exemple ci-dessus, il est évident 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 bref, &x[i] est équivalent à x+i et x[i] sont équivalents*(x+i).

示例1:指针和数组

#include <stdio.h>
int main() {
  int i, x[6], somme = 0;
  printf("Entrée6nombres: ");
  for(i = 0; i < 6; ++i) {
          // est équivalent à scanf("%d", &x[i]);
      scanf("%d", x+i);
          // est équivalent à sum += x[i]
      sum += *(x+i);
  }
  printf("somme = %d", sum);
  return 0;
}

L'exécution de ce programme produit la sortie suivante :

Entrée6nombres:  2
 3
 4
 4
 12
 4
somme = 29

Ici, nous avons déclaré un tableau contenant6un tableau d'éléments int x. Pour accéder aux éléments du tableau, nous utilisons un pointeur.

Dans la plupart des cas, le nom d'un tableau se décompose en pointeur. En d'autres termes, le nom du tableau est converti en pointeur. C'est pourquoi vous pouvez utiliser un pointeur pour accéder aux éléments d'un tableau. Mais, vous devez vous souvenir queUn pointeur et un tableau ne sont pas les mêmes.

Dans certains cas, le nom d'un tableau ne se décompose pas en pointeur.

示例2:数组和指针

#include <stdio.h>
int main() {
  int x[5]= {1, 2, 3, 4, 5};
  int* ptr;
  //ptr a été alloué à l'adresse de la troisième élément
  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;
}

L'exécution de ce programme produit la sortie suivante :

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

Dans cet exemple, l'adresse de l'élément troisième x [2] est assigné au pointeur ptr. Par conséquent, lorsque nous imprimons* ptr affiche3.

et, la sortie*(ptr+1) donne le quatrième élément. De manière similaire, la sortie*(tr-1) donne l'élément suivant.