Pointeurs et tableaux C ++

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 inttableau. Le code ptr = arr;stocke l'adresse du premier élément du tableau dans la variable ptr.

Notez que nous avons utilisé à la arrplace 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 + 3pointera 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);
Utilisation des pointeurs C ++ avec des tableaux

Remarque: l'adresse entre ptr et ptr + 1 diffère de 4 octets. C'est parce que ptr est un pointeur vers une intdonné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 chardes 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 + 1pour 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,

  1. 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.

  2. De même, nous avons ensuite utilisé forloop pour afficher les valeurs de arr en utilisant la notation pointeur.

     cout << *(arr + i) << endl ;

    Ce code équivaut à

     cout << arr(i) << endl ;

Articles intéressants...