Quels sont les pointeurs en C ++?

Pointeurs, l'outil le plus puissant de c ++, il aide le programmeur à accéder à la mémoire et à la manipuler directement. Par exemple, lorsqu'une variable est créée, le travail du compilateur est de faire l'allocation de mémoire pour stocker la valeur de la variable. Et cette valeur est récupérée à l'aide du nom de variable attribué aux données. C ++ a la compatibilité pour stocker et récupérer les données de la mémoire en se référant à l'adresse de l'emplacement de mémoire où les données sont stockées. C ++ effectue même des pointeurs sur un pointeur.

Syntaxe

Le format général de la déclaration du pointeur est:

Data_type * pointer -variable-name

Notez que la variable pointeur doit être précédée d'un astérisque (*)

Exemple: int * xptr;

La variable xptr est un pointeur sur un entier. En général, les variables de pointeur peuvent pointer vers des variables entières, des variables de caractères, des tableaux, des fichiers, des fonctions.

Pourquoi avons-nous besoin de pointeurs en C ++?

L'allocation dynamique de mémoire est simplifiée en C ++ à l'aide de pointeurs, l'importance la plus importante des pointeurs est qu'ils sont très efficaces pour gérer les différents types de données. Ils augmentent la vitesse d'exécution lorsque la fonction renvoie une valeur et permettent également d'accéder à une variable définie en dehors de la fonction. L'utilisation la plus courante comprend la gestion des données et l'accès aux fonctions des membres de la classe.

Comment créer des pointeurs en C ++?

Voici les étapes suivantes pour créer des pointeurs en C ++

Étape # 1 - Initialisation des pointeurs

Il est conseillé d'initialiser les variables du pointeur dès qu'elles sont déclarées. Comme les variables de pointeur stockent des adresses, elles peuvent adresser n'importe quelle partie de la mémoire.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Prenons l'exemple suivant:

int p, * pi; // Cette instruction indique au compilateur de réserver un espace pour que la variable p en mémoire contienne une valeur entière.

pi = & a; // Attribue l'adresse de la variable entière p à la variable pointeur. Par exemple, si l'adresse de p est 4581, alors la valeur dans * pi sera égale à 4581.

Étape # 2 - Pointeur vide

Ici, la variable pointeur est autorisée à pointer n'importe quel type de données et ce type est utilisé pour transmettre des pointeurs qui fonctionnent indépendamment du type de données pointé.

Syntaxe: void * variable pointeur;

Exemple:

#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )

Production:

$ g ++ -o main * .cpp
$ main
la valeur pointée par iv est 3
L'adresse de x est 0x7ffefbbee6d4
la valeur pointée par fv est 45, 2
L'adresse de f est 0x7ffefbbee6d0
L'adresse de x est 0x7ffefbbee6d4

l'adresse de f est 0x7ffefbbee6d0

Étape # 3 - Opérations arithmétiques des pointeurs en C ++

L'arithmétique du pointeur est effectuée avec des tableaux. Les opérations suivantes peuvent être effectuées sur des pointeurs. Elles sont:

  • Incrément (++)
  • Décrémenter (-)
  • Ajout d'un pointeur
  • Soustraction de pointeur

Lorsque nous ajoutons 1 au pointeur, cela spécifie l'ajout de la taille du pointeur pointant vers.

Le programme ci-dessous spécifie l'arithmétique du pointeur qu'il fonctionne jusqu'à ce qu'il atteigne la fin du tableau.

#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)

Production:

$ g ++ -o main * .cpp
$ main
2

4

6

8

dix

12

14

16

18

20

0

0

4196480

0

-1743362854

32686

1

0

153860328

32766

Étape # 4 - Pointeur vers pointeur

float ** fpp;

Il dénote deux niveaux de pointeurs ( indirections multiples ). C'est une variable qui pointe vers un autre pointeur pointe vers un objet spécifié dans un emplacement de mémoire. Par exemple, fpp est un pointeur flottant pointant actuellement vers l'adresse mémoire 2001, la taille du flotteur est de 8 octets, puis par

fpp ++;

indique que fpp pointe vers l'adresse 2009. De même, lorsque la variable est décrémentée de 1, elle pointe vers l'emplacement précédent de son type de base à l'adresse 1993.

Étape # 5 - Pointeur vers les fonctions

Lorsque des pointeurs sont passés à une fonction en tant qu'arguments, les éléments de données associés à la variable de ces pointeurs sont modifiés dans la fonction, puis renvoyés au programme appelant, les modifications seront conservées dans le programme appelant. Lorsqu'un pointeur est transmis en tant que paramètre, les éléments de données respectifs sont modifiés globalement à partir de la fonction appelée. Le pointeur est transmis par référence. Les fonctions peuvent être exécutées dans des pointeurs de différentes manières:

  1. la fonction invoquée en passant la référence
  2. La fonction invoquée en passant un pointeur

La fonction invoquée en passant la référence

Dans ce cas, l'adresse est passée en argument au lieu de valeurs.

Exemple:

#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)

Production:

$ g ++ -o main * .cpp
$ main
Avant le changement

n = 5

m = 6

Après le changement

n = 6

m = 5

Conclusion

Cet article avait pour objectif d'actualiser les connaissances sur l'utilisation des pointeurs en C ++ et leurs rubriques de base de manière simple avec un exemple. Le pointeur est également connu sous le nom de localisateur qui réduit l'instruction de code pour de meilleures performances. Les pointeurs jouent un rôle essentiel dans la mise en œuvre de structures de données telles que la liste chaînée et la programmation au niveau du système. Ils sont le langage le plus préférable dans les systèmes embarqués car ils sont un bon moyen d'accéder directement à la mémoire à l'aide de pointeurs.

Articles recommandés

Ceci est un guide des pointeurs en C ++. Ici, nous discutons comment créer des pointeurs en C ++ avec les exemples et la sortie donnés et pourquoi en avons-nous besoin. Vous pouvez également consulter le cours d'analyse de données suivant pour en savoir plus

  1. Pointeurs en Python
  2. Types de données en C
  3. Tableaux en C ++
  4. Motifs d'étoiles en c ++
  5. Comment les pointeurs fonctionnent-ils en C #?