Dans ce didacticiel, nous apprendrons la relation entre les tableaux et les pointeurs à l'aide d'exemples.
En C ++, les pointeurs sont des variables qui contiennent les adresses d'autres variables. Non seulement un pointeur peut stocker l'adresse d'une seule variable, mais il peut également stocker l'adresse des cellules d'un tableau.
Prenons cet exemple:
int *ptr; int arr(5); // store the address of the first // element of arr in ptr ptr = arr;
Ici, ptr est une variable de pointeur tandis que arr est un int
tableau. Le code ptr = arr;
stocke l'adresse du premier élément du tableau dans la variable ptr.
Notez que nous avons utilisé à la arr
place de &arr(0)
. C'est parce que les deux sont identiques. Ainsi, le code ci-dessous est le même que le code ci-dessus.
int *ptr; int arr(5); ptr = &arr(0);
Les adresses pour le reste des éléments du tableau sont donnés par &arr(1)
, &arr(2)
, &arr(3)
, et &arr(4)
.
Pointez sur tous les éléments du tableau
Supposons que nous ayons besoin de pointer vers le quatrième élément du tableau en utilisant le même pointeur ptr.
Ici, si ptr pointe vers le premier élément de l'exemple ci-dessus, il ptr + 3
pointera vers le quatrième élément. Par exemple,
int *ptr; int arr(5); ptr = arr; ptr + 1 is equivalent to &arr(1); ptr + 2 is equivalent to &arr(2); ptr + 3 is equivalent to &arr(3); ptr + 4 is equivalent to &arr(4);
De même, nous pouvons accéder aux éléments en utilisant le pointeur unique. Par exemple,
// use dereference operator *ptr == arr(0); *(ptr + 1) is equivalent to arr(1); *(ptr + 2) is equivalent to arr(2); *(ptr + 3) is equivalent to arr(3); *(ptr + 4) is equivalent to arr(4);
Supposons que si nous avons initialisé ptr = &arr(2);
alors
ptr - 2 is equivalent to &arr(0); ptr - 1 is equivalent to &arr(1); ptr + 1 is equivalent to &arr(3); ptr + 2 is equivalent to &arr(4);

Remarque: l'adresse entre ptr et ptr + 1 diffère de 4 octets. C'est parce que ptr est un pointeur vers une int
donnée. Et, la taille de int est de 4 octets dans un système d'exploitation 64 bits.
De même, si le pointeur ptr pointe vers char
des données de type, alors l'adresse entre ptr et ptr + 1 est de 1 octet. C'est parce que la taille d'un caractère est de 1 octet.
Exemple 1: pointeurs et tableaux C ++
// C++ Program to display address of each element of an array #include using namespace std; int main() ( float arr(3); // declare pointer variable float *ptr; cout << "Displaying address using arrays: " << endl; // use for loop to print addresses of all array elements for (int i = 0; i < 3; ++i) ( cout << "&arr(" << i << ") = " << &arr(i) << endl; ) // ptr = &arr(0) ptr = arr; cout<<"Displaying address using pointers: "<< endl; // use for loop to print addresses of all array elements // using pointer notation for (int i = 0; i < 3; ++i) ( cout << "ptr + " << i << " = "<< ptr + i << endl; ) return 0; )
Production
Affichage de l'adresse à l'aide de tableaux: & arr (0) = 0x61fef0 & arr (1) = 0x61fef4 & arr (2) = 0x61fef8 Affichage de l'adresse à l'aide de pointeurs: ptr + 0 = 0x61fef0 ptr + 1 = 0x61fef4 ptr + 2 = 0x61fef8
Dans le programme ci-dessus, nous avons d'abord simplement imprimé les adresses des éléments du tableau sans utiliser la variable pointeur ptr.
Ensuite, nous avons utilisé le pointeur ptr pour pointer vers l'adresse de a (0), ptr + 1
pour pointer vers l'adresse de a (1), et ainsi de suite.
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 nous pouvons utiliser des pointeurs pour accéder à des éléments de tableaux.
Cependant, nous devons nous 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: nom de tableau utilisé comme pointeur
// C++ Program to insert and display data entered by using pointer notation. #include using namespace std; int main() ( float arr(5); // Insert data using pointer notation cout << "Enter 5 numbers: "; for (int i = 0; i > *(arr + i) ; ) // Display data using pointer notation cout << "Displaying data: " << endl; for (int i = 0; i < 5; ++i) ( // display value of arr(i) cout << *(arr + i) << endl ; ) return 0; )
Production
Saisissez 5 chiffres: 2,5 3,5 4,5 5 2 Affichage des données: 2,5 3,5 4,5 5 2
Ici,
-
Nous avons d'abord utilisé la notation pointeur pour stocker les nombres saisis par l'utilisateur dans le tableau arr.
cin>> *(arr + i) ;
Ce code est équivalent au code ci-dessous:
cin>> arr(i);
Notez que nous n'avons pas déclaré de variable de pointeur distincte, mais que nous utilisons plutôt le nom du tableau arr pour la notation du pointeur.
Comme nous le savons déjà, le nom du tableau arr pointe vers le premier élément du tableau. Ainsi, nous pouvons penser à arr comme agissant comme un pointeur.
-
De même, nous avons ensuite utilisé
for
loop pour afficher les valeurs de arr en utilisant la notation pointeur.cout << *(arr + i) << endl ;
Ce code équivaut à
cout << arr(i) << endl ;