Différences entre les versions de « Programmation C++/Les pointeurs »

m
<source> -> <syntaxhighlight> (phab:T237267)
m (<source> -> <syntaxhighlight> (phab:T237267))
Toute variable ''a'' permet d'accéder :
* à sa valeur en lecture et en écriture :
<sourcesyntaxhighlight lang="cpp">
int a;
a = 10; // écriture de la valeur de a
cout << "A vaut " << a ; // lecture de la valeur de a
</syntaxhighlight>
</source>
* à son adresse en lecture seulement car l'adresse (l'emplacement mémoire) est choisie par le système :
<sourcesyntaxhighlight lang="cpp">
cout << "L'adresse de A est " << &a ; // lecture de l'adresse de a
</syntaxhighlight>
</source>
 
Un pointeur désigne un type particulier de variable dont la valeur est une adresse.
== Comparaison avec une variable classique ==
 
<sourcesyntaxhighlight lang="cpp">
int a;
int* pA;
pA = &a; // l'adresse de a est stockée dans pA
</syntaxhighlight>
</source>
 
{|
| écriture de la valeur de a
|
<sourcesyntaxhighlight lang="cpp">
a = 10;
</syntaxhighlight>
</source>
|
<sourcesyntaxhighlight lang="cpp">
*pA = 10;
</syntaxhighlight>
</source>
|-
| lecture de la valeur de a
|
<sourcesyntaxhighlight lang="cpp">
cout << "A vaut " << a ;
</syntaxhighlight>
</source>
|
<sourcesyntaxhighlight lang="cpp">
cout << "A vaut " << *pA ;
</syntaxhighlight>
</source>
|-
| lecture de l'adresse de a
|
<sourcesyntaxhighlight lang="cpp">
cout << "L'adresse de A est " << &a ;
</syntaxhighlight>
</source>
|
<sourcesyntaxhighlight lang="cpp">
cout << "L'adresse de A est " << pA ;
</syntaxhighlight>
</source>
|}
 
== Exemple de programme ==
 
<sourcesyntaxhighlight lang="cpp">
#include <iostream>
using namespace std;
return 0;
}
</syntaxhighlight>
</source>
 
=== Exécution ===
=== Exemple 1 ===
 
<sourcesyntaxhighlight lang="cpp">
char* ptr="Pointeur"; // ptr pointe le premier caractère de la chaîne de caractères
 
cout << ++ptr << endl; // affiche "teur"
cout << --ptr << endl; // affiche "nteur"
</syntaxhighlight>
</source>
 
 
=== Exemple 2 ===
 
<sourcesyntaxhighlight lang="cpp">
int premiers[] = { 2, 3, 5, 7, 11, 13, 17 };
int* ptr = premiers; // pointe le premier élément du tableau
cout << *ptr << endl; // affiche "7"
cout << *(ptr-1) << endl; // affiche "5"
</syntaxhighlight>
</source>
 
Dans l'exemple 2, la différence d'adresse est de 20 octets (<code>5 * sizeof(int)</code>).
 
Exemple :
<sourcesyntaxhighlight lang="cpp">
char str[]="Message où rechercher des caractères.";
char *p1 = strchr(str,'a'); // recherche le caractère 'a' dans str
cout << "Nombre de caractères de 'a' à 'è' = " << (p2-p1) << endl;
// affiche : Nombre de caractères de 'a' à 'è' = 28
</syntaxhighlight>
</source>
 
== Pointeur constant et pointeur vers valeur constante ==
 
Exemple:
<sourcesyntaxhighlight lang="cpp">
const char* msg = "essai constant";
 
 
msg = "Test"; // OK -> le pointeur contient l'adresse de "Test"
</syntaxhighlight>
</source>
 
=== Pointeur constant ===
 
Exemple:
<sourcesyntaxhighlight lang="cpp">
char* const msg = "essai constant";
 
*msg = 'E'; // OK -> "Essai constant"
</syntaxhighlight>
</source>
 
=== Pointeur constant vers une valeur constante ===
 
Exemple:
<sourcesyntaxhighlight lang="cpp">
const char* const msg = "essai constant";
 
 
*msg = 'E'; // <- Interdit, la valeur pointée ne peut être modifiée
</syntaxhighlight>
</source>
 
=== Position du mot clé <code>const</code> ===
1 535

modifications