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

C++ Tutoriel de base

C++ Contrôle de flux

C++ Fonction

C++ Tableau & Chaîne

C++ Structure des données

C++ Classe & Objet

C++ Pointeur

C++ Héritage

C++ STL Tutorial

C++ Manuel de référence

C++ Pointeur

Dans cet article, vous apprendrez tout ce que vous devez savoir sur les pointeurs. Vous apprendrez à stocker des valeurs dans le computer et à accéder à elles à l'aide de pointeurs.

Les pointeurs sont en C++Les caractéristiques puissantes, qui font de C++Se distinguent des autres langages de programmation (comme Java et Python).

Les pointeurs en C ++Utilisé dans le programme pour accéder à la mémoire et manipuler les adresses.

C ++Adresse

Pour comprendre le pointeur, vous devriez d'abord savoir comment stocker les données sur l'ordinateur.

Chaque variable créée dans le programme est allouée une position dans la mémoire du computer. La valeur stockée par la variable est réellement stockée à l'adresse spécifiée.

Pour savoir où les données sont stockées, C++Il y a un opérateur & (référence). L'opérateur & (référence) donne l'adresse occupée par la variable.

Si var est une variable, alors &var donne l'adresse de cette variable.

Exemple1:C ++l'adresse

#include <iostream>
using namespace std;
int main()
{
    int var1 = 3;
    int var2 = 24;
    int var3 = 17;
    cout << &var1 << endl;
    cout << &var2 << endl;
    cout << &var3 << endl;
}

Résultat de la sortie

0x7fff5fbff8ac
0x7fff5fbff8a8
0x7fff5fbff8a4

Remarque: Il se peut que vous ne obteniez pas le même résultat sur votre système.

Le zéro initial 0x indique que l'adresse est au format hexadécimal.

Veuillez noter que la différence entre la première adresse et la deuxième adresse est4octets, la différence entre la deuxième adresse et la troisième adresse est4octets.

C'est parce que64Dans un système binaire, la taille d'un entier (variable de type int) est4octets.

Variable de pointeur

C ++Vous permet de manipuler directement les données de la mémoire du computer. Vous pouvez allouer et désallouer de l'espace dans la mémoire selon vos besoins. Cela est réalisé en utilisant la variable de pointeur (pointer).

Une variable de pointeur est une variable qui pointe vers une adresse spécifique de la mémoire où se trouve une autre variable.

Comment déclarer un pointeur ?

int *p;
      ou
int* p;

La déclaration de la variable de pointeur p définit une variable de pointeur. Elle sauvegarde l'adresse de la mémoire

L'astérisque (*) est l'opérateur de déréférencement, ce qui signifieLe pointeur pointé.

Dans ce cas, le pointeur p est un pointeur vers int, c'est-à-dire qu'il pointe vers la valeur entière dans l'adresse de la mémoire.

L'opérateur de référence (&) et l'opérateur de référence (*)

L'opérateur de référence (&) mentionné précédemment donne l'adresse de la variable.

Pour obtenir la valeur stockée à l'adresse mémoire, nous utilisons l'opérateur de déréférencement (}}*)。

Par exemple:Si la variable number est stockée à l'adresse mémoire0x123dans, et il contient une valeur5.

reference(&) opérateur donne une valeur0x123, tandis que l'opérateur de déréférencement (*) opérateur donne une valeur5.

Remarque:Remarque: c++Déclaration de pointeur utilisant (*) le symbole n'est pas un pointeur de référence. C'est simplement un symbole similaire à celui de la création de pointeurs.

Exemple2:C ++Pointeur

C ++Le programme démontre le fonctionnement des pointeurs.

#include <iostream>
using namespace std;
int main() {
    int *pc, c;
    
    c = 5;
    cout << "Adresse de c (&c): " << &c << endl;
    cout << "Valeur de c (c): " << c << endl << endl;
    pc = &c;    // Le pointeur pc conserve l'adresse mémoire de la variable c
    cout << "L'adresse du pointeur détenu par pc (pc): " << pc << endl;
    cout << "La valeur détenu par le pointeur d'adresse pc (*pc): " << *pc << endl << endl;
    
    c = 11;    // La valeur de l'adresse mémoire &c a été modifiée en5modifié en11.
    cout << "L'adresse du pointeur détenu par pc (pc): " << pc << endl;
    cout << "Le contenu détenu par le pointeur d'adresse pc (*pc): " << *pc << endl << endl;
    *pc = 2; 
    cout << "Adresse de c (&c): " << &c << endl;
    cout << "Valeur de c (c): " << c << endl << endl;
    return 0;
}

Résultat de la sortie

Adresse de c (&c): 0046FD44
Valeur de c (c): 5
L'adresse du pointeur détenu par pc (pc): 0046F
La valeur détenu par le pointeur d'adresse pc (*pc): 5
Le pointeur d'adresse pc détient (pc): 0046FD4
Le contenu détenu par le pointeur d'adresse pc (*pc):
Adresse de c (&c): 0046FD44
Valeur de c (c): 2

Instructions d'utilisation du programme

  • lorsque c = 5; Utilisation du programme5; Valeur-0x7fff5fbff8l'adresse de c. Stocké dans la variable c

  • lorsque pc = &c; l'adresse du pointeur pc est c-0x7fff5fbff8lorsque c, l'expression (opérateur de déréférencement)*pc affiche la valeur stockée à cette adresse5.

  • lorsque c = 11; Comme le pointeur d'adresse détenu par pc et c - 0x7fff5fbff8c est le même, donc lors de l'exécution de l'expression*lorsque pc, la valeur de c change également, et maintenant l'affichage11.

  • Lorsque*pc = 2lorsque; il change pc - 0x7fff5fbff8le contenu de l'adresse stockée dans c. Ce contenu de11devenue2. Par conséquent, lorsque nous affichons la valeur de c, cette valeur est également2.

Erreurs courantes lors de l'utilisation des pointeurs

Supposons que vous souhaitez que le pointeur pc pointe vers l'adresse de c. Ensuite,

int c; *pc;
pc = c;  /* Erreur ! pc est une adresse, tandis que c n'est pas une adresse. */
*pc = &c; /*Incorrect !  * pc est la valeur pointée par l'adresse, et &c est une adresse.*/
pc = &c; /* Correct !     pc est une adresse, et &c est également une adresse. */
*pc = c; /* Correct !  * pc est la valeur pointée par l'adresse, et c est également une valeur. */

Dans ces deux cas, le pointeur pc n'indique pas l'adresse de c.

Vous devriez également consulter ces tutoriels liés aux pointeurs :