Introduction au Langage C++ et Concepts Clés
Introduction au Langage C++ et Concepts Clés
A. SERGHINI 1
1- Présentation du langage C++
A. SERGHINI 2
2- Étapes permettant l’édition, la mise au point,
l’exécution d’un programme en C++
A. SERGHINI 3
3- Éditions de liens: Le code machine des fonctions-
bibliothèque est chargé, création d'un fichier binaire, non
éditable en mode texte, appelé fichier exécutable:
EXI_1.EXE.
A. SERGHINI 4
Exemple :
A. SERGHINI 5
3- Espaces de noms C++
A. SERGHINI 6
Pour utiliser une fonction définie dans un chemin
d’accès il faut utiliser le chemin d’accès :
int main(){
fon1() // erreur fonc1() n’existe pas
MaBiblio::fonc2() // ok
...}
Pour éviter d’alourdir le code, il est possible de préciser
que les membres d’un espace de noms seront utilisés
directement grâce aux mot clef using.
Il y a deux méthodes :
A. SERGHINI 7
2- Préciser les fonctions à utiliser
using Mabiblio::fonc1( )
fonc1() // ok
fonc2() // fonc2 n’existe pas en dehors
// de l’espace de nom
A. SERGHINI 8
4- La gestion de la mémoire
La mémoire de l’ordinateur se comporte de trois zones
d allocation :
1- La pile:
La pile contient les variables qui sont déclarées à
. l’intérieur des fonctions ou à des blocs ({…})
Ces variables sont appelées variables locales ou
automatiques
Elles sont créés à l’appel de la fonction et détruites à la
sortie de la fonction (respectivement à l’entrée et à la
sortie du bloc)
Leurs durées de vie est donc la durés de vie de la fonction.
A. SERGHINI 9
2- La zone statique:
La zone d’allocation statique contient les variables qui sont
déclarées en dehors de toutes fonction ou à l’intérieur
d’une fonction mais avec le qualifiant static.
Ces variables sont appelées variables globales ou statiques
Elles sont créés à l’exécution du programme et détruites à
. la fin de celui-ci
Leurs durées de vie est donc la vie du programme.
3- Le tas:
Le tas contient les variables qui sont créés par le
programme au cours de son exécution. On parle
d’allocation dynamique.
Ces variables sont appelées variables dynamiques
Leurs durées de vie est donc variable.
A. SERGHINI 10
5- Types prédéfinis
A. SERGHINI 11
Le C++, est un langage typé, chaque entité doit disposer d’un type.
A. SERGHINI 12
5-2 Types –Tailles :
1- Les entiers
A. SERGHINI 13
Numération:
A. SERGHINI 14
2- Les réels:
A. SERGHINI 15
5-3 Les initialisations :
Cette règle s'applique à tous les nombres, char, int, float ...
Pour améliorer la lisibilité des programmes et leur efficacité,
il est conseillé de l’utiliser.
A. SERGHINI 16
5-4 La portée d'une variable
C++ permet de déclarer des variables n’importe où et de les
initialiser dans un bloc. La porté d’une variable dépend de
l’endroit ou il est placé:
Globale: Les variables globales sont déclarées en dehors de toute
fonction Elle est allouée et initialisée automatiquement avant
l'entrée dans la fonction 'main'.
Elle est nettoyée et libérée automatiquement après la sortie de la
fonction 'main'.
Locale: (dite également automatique) est visible dans le bloc
d’instructions dans lequel elle à été déclaré et ce, à partir de sa
déclaration. Elle est allouée et initialisée.
Elle est nettoyée et libérée automatiquement, lorsqu’on sort du
block d’instructions
Dynamique: est totalement contrôlée par le programmeur.
A. SERGHINI 17
5-5 Classe de stockage :
Le C/C++ dispose des classes de stockage qui permettent de
spécifier la portée de la variable :
• auto : la
classe de stockage par défaut. Les variables ont pour portée
le bloc d’instructions où sont définis. Leur durée de vie est restreinte
à ce bloc.
• static : permet
de créer des variables dont la portée est le bloc
d’instructions en cours, mais qui, contrairement aux variables auto,
ne sont pas détruites lors de la sortie de ce bloc. À chaque fois que
l’on rentre dans ce bloc d’instructions, les variables statiques
existeront et auront pour valeurs celles qu’elles avaient avant que l’on
quitte ce bloc.
• const : la
variable désigne en fait une constante ; aucune
modification n’est autorisée dans le programme.
A. SERGHINI 18
• extern : est
utilisée pour signaler que la variable peut être définie
dans un autre fichier.
• volatile : un
objet déclaré volatile peut être modifié par un
événement extérieur à ce qui est contrôlé par le compilateur
(exemple : variable mise à jour par l’horloge système).
A. SERGHINI 19
6- Les Flots cout et cin
A. SERGHINI 20
Exemple 1:
A. SERGHINI 21
Exemple 2:
A. SERGHINI 22
Exemple 3:
A. SERGHINI 23
7- Les opérateurs
Opérateurs arithmétiques sur les réels:
+ - * / avec la hiérarchie habituelle.
Opérateurs arithmétiques sur les entiers:
+ - * / (quotient de la division) % (reste de la division).
Opérateurs relationnels
> >= <= < comparaisons
. == != égalité et inégalité
! négation (opérateur unaire)
&& ET relationnel
|| OU relationnel
Opérateurs logiques sur les entiers:
& ET
| OU
^ OU EXCLUSIF
~ COMPLEMENT A UN
« DECALAGE A GAUCHE
» DECALAGE A DROITE.
.
A. SERGHINI 24
- Incrémentation- Décrémentation
Le langage C++ autorise des écritures simplifiées pour
l'incrémentation et la décrémentation de variables de type
entier (int, char, long)
- Opérateurs combinés
Le langage C++ autorise des écritures simplifiées lorsqu'une
même variable est utilisée de chaque côté du signe = d'une
affectation.
a = a+b; est équivalent à a+= b;
a = a-b; est équivalent à a-= b;
a = a & b; est équivalent à a&= b;
A. SERGHINI 25
8- Les déclarations des constantes
Le langage C++ autorise 2 méthodes pour définir des constantes.
1ere méthode:
déclaration d'une variable, dont la valeur sera constante pour
toute la portée de la fonction main.
Exemple :
.
A. SERGHINI 26
2 ème méthode:
Définition d'un symbole à l'aide de la directive de compilation
#define.
Exemple:
A. SERGHINI 27
Exercice 1:
Saisir un caractère au clavier, afficher son code ASCII à
l'écran.
Exercice 2:
Dans une élection, I est le nombre d’inscrits, V le nombre
de votants, P = 100V/I le pourcentage de votants, M = V/2
le nombre de voix pour obtenir la majorité.
Écrire un programme qui demande à l’utilisateur de saisir I
et V, puis calcule et affiche P et M.
Exercice 3:
Saisir 3 entiers, calculer et afficher leur moyenne.
A. SERGHINI 28
Chapitre 4
Les tests et les boucles en C++
[Link] 1
1- L‘instruction Si ... Alors ... Sinon ...
Syntaxe en C++:
if (condition)
{
............; // bloc 1 d'instructions
............;
. ............;
}
else
{
............; // bloc 2 d'instructions
............;
............;
}
suite du programme ...
[Link] 2
2- L'instruction Répéter ... Tant que ...
Syntaxe en C++:
do
{
............; // bloc d'instructions
. ............;
............;
}
while (condition);
suite du programme ...
[Link] 3
3- La boucle Tant que ... faire ...
Syntaxe en C++:
while (condition)
{
............; // bloc d'instructions
. ............;
............;
}
suite du programme ...
[Link] 4
4- L'instruction Pour ...
Syntaxe en C++:
for(instruction1; condition; instruction2)
{
. ............; // bloc d'instructions
............;
............;
}
suite du programme ...
[Link] 5
5- L'instruction Au cas ou ... Faire ...
L'instruction switch permet des choix multiples uniquement sur des
entiers (int) ou des caractères (char).
Syntaxe C++:
switch(variable de type char ou int) au cas où la variable vaut:
{
case valeur1: ......; - cette valeur1: exécuter ce bloc d'instructions.
.......;
. break; - se brancher à la fin du bloc case.
case valeur2: ........; - cette valeur2: exécuter ce bloc d'instructions.
........;
break; - se brancher à la fin du bloc case.
.
. etc ...
.
default: .......; - aucune des valeurs précédentes: exécuter ce bloc
........; d'instructions, pas de "break" ici.
}
le bloc "default" n'est pas obligatoire.
L’instruction switch correspond à une cascade d’instructions if ...else
[Link] 6
Exercice-1:
L'utilisateur saisit un caractère, le programme teste s'il
s'agit d'une lettre majuscule, si oui il renvoie cette lettre
en minuscule, sinon il renvoie un message d'erreur.
Exercice-2:
Dans une élection, I est le nombre d’inscrits, V le nombre
. de votants, Q le nombre minimum de votants pour que le
vote soit déclaré valable, P = 100V/I le pourcentage de
votants, M = V/2 + 1 le nombre de voix pour obtenir la
majorité absolue. Écrire un programme qui
1- demande à l’utilisateur de saisir I, Q et V,
2- teste si le nombre minimum de votants pour que le vote
soit déclaré valable est atteint,
3- si oui calcule et affiche P, M, sinon affiche un message
d’avertissement.
[Link] 7
Exercice-3:
Écrire un programme permettant de saisir un entier n,
de calculer n!, puis de l’afficher. Utiliser une boucle do
...while puis while puis for.
Quelle est la plus grande valeur possible de n, si n est
déclaré int, puis unsigned int?
Exercice-4:
La formule récurrente ci-dessous permet de calculer la
racine du nombre 2 :
U0 = 1
Ui = ( Ui-1+ 2/Ui-1 ) / 2
Écrire un programme qui saisit le nombre d’itérations,
puis calcule et affiche la racine de 2.
Exercice-5:
Résoudre ax2 + bx +c = 0.
[Link] 8
Chapitre 5
Pointeur, Tableau, Allocation dynamique.
A. SERGHINI
Cours C++ 1
1- Les Pointeurs
Définitions
Un pointeur p est une variable qui sert à contenir l’adresse
mémoire d’une autre variable.
Si la variable v occupe plus d’une case mémoire, l’adresse
. contenue dans le pointeur p est celle de la première case
utilisée par v.
La variable v est appelée variable pointée.
Si p contient l’adresse de v alors on dit que p pointe sur v.
Le pointeur possède un type qui dépend du type des
variables pointées.
Un pointeur peut contenir aussi l’adresse d’une fonction,
on parlera alors de pointeur de fonctions.
A. SERGHINI
Cours C++ 2
Déclaration des pointeurs:
Une variable de type pointeur se déclare à l'aide du type de
l'objet pointé précédé du symbole *.
Exemple:
char *pc; pc est un pointeur sur un objet de type char
. int *pi; pi est un pointeur sur un objet de type int
float *pr; pr est un pointeur sur un objet de type float
A. SERGHINI
Cours C++ 3
Arithmétique des pointeurs
On peut essentiellement déplacer un pointeur dans un plan
mémoire à l'aide des opérateurs d'addition, de
soustraction, d'incrémentation, de décrémentation.
On ne peut le déplacer que d'un nombre de cases mémoire
multiple du nombre de cases réservées en mémoire pour la
variable sur laquelle il pointe.
A. SERGHINI
Cours C++ 4
Exemple:
char *pc;
- Si on se contente de cette déclaration, le pointeur pointe «
n’importe où ». Son usage, tel que, dans un programme
peut conduire à un « plantage » du programme ou du
système d’exploitation si les mécanismes de protection ne
sont pas assez robustes.
- L’initialisation du pointeur n’ayant pas été faite, on risque
d’utiliser des adresses non autorisées ou de modifier
d’autres variables.
Exemple d’affectation :
int i=5;
int * pi;
pi=&i;
cout <<"valeur de i = " << i<< endl;
cout <<"adresse de i = " << &i<< endl;
cout <<"adresse oŭ il pointe pi = " << pi<< endl;
A. SERGHINI
Cours C++ 5
Incompatibilité de types :
On ne peut pas affecter à un pointeur de typeT1 l’adresse
d ’une variable d ’autre type T2
Exemple:
int i=5;
char * pc; erreur
. pc=&i;
On peut cependant forcer la conversion.
A utiliser avec précaution ....
int i=5;
char * pc;
pc= ( char *) &i;
A. SERGHINI
Cours C++ 6
Pointeur Void :
Les pointeurs void sont un type particulier de pointeur
Ils peuvent pointer sur une variable de n’importe quel type
On ne peut pas utiliser l’opérateur d’indirection * sur un
pointeur void. Il faut d’abord le convertir en un pointeur
d’un type donné.
Exemples :
int a=5, b=6;
int * pi=&a;
void * pv = &b; //correct
pv=pi //correct
pi =pv // !!! Erreur!!!
pi=(int*) pv //correct
cout <<*pv ; // !!! Erreur!!!
cout <<*((int *) pv ); //correct
A. SERGHINI
Cours C++ 7
2- Les Tableaux
Les tableaux correspondent aux vecteurs et matrices en
mathématiques. Un tableau est caractérisé par sa taille et
par le type de ses éléments.
Remarque:
dim est nécessairement une EXPRESSION CONSTANTE.
A. SERGHINI
Cours C++ 8
Les tableaux à plusieurs dimensions:
- Tableaux à deux dimensions:
Déclaration:
type nom[dim1][dim2];
Exemples:
int compteur[4][5];
. float nombre[2][10];
A. SERGHINI
Cours C++ 9
Les Tableaux et Les Pointeurs
A. SERGHINI
Cours C++ 10
Exemple:
const int MAX=7;
int tab[MAX]; int *p;
p=tab;
*p=0; //tab[0]=0
p++;
*p=10; //tab[1]=10
p=&tab[2];
*p=20; //tab[2]=20
. p=tab+3;
*p=30; //tab[3]=30
p=tab;
*(p+4)=40; //tab[4]=40
tab[5]=50; //tab[5]=50
*(tab+6)=60; //tab[6]=60
for ( int n=0; n<MAX; n++) cout << tab[n]<< " " ;
Résultats d’exécution:
0 10 20 30 40 50 60
L’instruction telle que tab=p aurait provoqué une erreur à la
compilation
A. SERGHINI
Cours C++ 11
Exercice 1:
Un programme contient la déclaration suivante:
int tab[10] = {4,12,53,19,11,60,24,12,89,19};
Compléter ce programme de sorte d'afficher les adresses des
éléments du tableau.
Exercice 2:
Un programme contient la déclaration suivante:
int tab[20] = {4,-2,-23,4,34,-67,8,9,-10,11, 4,12,-53,19,11,-60, 24, 12,
89,19};
Compléter ce programme de sorte d'afficher les éléments du
tableau avec la présentation suivante:
4 -2 -23 4 34
-67 8 9 -10 11
4 12 -53 19 11
-60 24 12 89 19
A. SERGHINI
Cours C++ 12
3- L’ allocation dynamique
Intérêt de l’allocation dynamique
L’allocation dynamique permet une gestion plus flexible de la mémoire
Un programme n’utilise la mémoire dont il a besoins qu’au moment du
besoin
Ainsi il évite de monopoliser de l’espace mémoire aux instants où il n’en a
pas besoins et permet donc à d’autres programmes de l’utiliser
La mémoire peut ainsi être partagée de manières plus efficaces entre
plusieurs programmes.
. - Supposant qu’un programme ait besoin d’afficher 100 objets graphiques
différents et que ces objets sont très volumineux (en espace mémoire).
- Supposant aussi qu’un instant donné, le programme n’a besoin d’afficher
simultanément et au maximum 10 objets parmi 100.
- Supposant que la taille de la mémoire permet au maximum le stockage
simultané de 30 objets graphiques
- Allouer les 100 objets de façon statique est impossible puisque l’espace
mémoire est insuffisant.
- En revanche, déclarer dynamiquement 10 objets est tout à fait possible et
le programme pourra alors s’exécuter sans problème pour 100 objets à des
instants différentes.
A. SERGHINI
Cours C++ 13
L’Opérateur new
L’opérateur new permet l’allocation de l’espace mémoire
nécessaire pour stocker un élément d’un type T donné.
Pour que l’opérateur new puisse connaître la taille de
l’espace à allouer il faut donc lui indiquer le type T
Si l’allocation réussit (il y a suffisamment d’espace en
. mémoire) alors l’opérateur new retourne l’adresse de
l’espace alloué.
Cette adresse doit être alors affectée à un pointeur de type
T pour pouvoir utiliser cet espace par la suite
Si l’allocation échoue (il n’y a pas suffisamment d’espace
mémoire) alors l’opérateur new retourne NULL (0)
T *p;
P = new T ou T *p = new T
A. SERGHINI
Cours C++ 14
Il est possible d’indiquer après le type T une valeur pour
initialiser l’espace ainsi alloué. Cette valeur doit être indiquer
entre parenthèses : new T (val)
A. SERGHINI
Cours C++ 15
Pour allouer dynamiquement un tableau d’éléments il suffit
d’utiliser l’opérateur new [] en indiquant entre les crochets le
nombre d’éléments
Contrairement aux tableaux statiques où le nombre
d’éléments devait être une constante (valeur connue à la
. compilation) ici le nombre d’éléments peut être variable dont
la valeur ne sera connue qu’a l’exécution (la valeur saisie par
l’utilisateur, lue à partir d’un fichier)
On récupère alors du premier élément du tableau
T *p = new T[n]; // p contiendra l’adresse du premier élément
A. SERGHINI
Cours C++ 16
L’Opérateur delete
A. SERGHINI
Cours C++ 17
Libération d’un tableau : opérateur delete []
int *p ,i,n;
cout<<“Nombre delements ?: “;
cin>> n;
. p= new int [n];
for (i=0;i<n;i++)
cin >>p[i];
for (i=0;i<n;i++)
cout<< p[i]*p[i]<<endl;
delete [] p;
A. SERGHINI
Cours C++ 18
Tableaux dynamiques à 2 dimensions:
A. SERGHINI
Cours C++ 20
main()
{ int k, n;
int **tab;
tab = new int*[k];
for (i = 0; i < k; i++)
tab[i] = new int[n];
....
for (i = 0; i < k; i++)
delete [] tab[i];
delete [] tab;
}
• La première allocation dynamique réserve pour l'objet pointé par
tab l'espace mémoire correspondant à k pointeurs sur des entiers.
Ces k pointeurs correspondent aux lignes de la matrice.
• Les allocations dynamiques suivantes réservent pour chaque
pointeur tab[i] l'espace mémoire nécessaire pour stocker n entiers.
A. SERGHINI
Cours C++ 21
Exemple de tableau de chaînes:
A. SERGHINI
Cours C++ 22
Chapitre 6
Les fonctions, les références , les constantes.
A. SERGHINI
Cours C++ 1
Fonction en C ++:
A. SERGHINI 2
Pour élaborer une fonction C/C++, il faut coder les
instructions qu’elle doit exécuter, en respectant certaines
règles syntaxiques. Ce code source est appelé définition de
la fonction. Une définition de fonction spécifié:
o La classe de mémorisation de la fonction;
o Le type de la valeur renvoyée par la fonction;
o Le nom de la fonction;
o Les paramètres (arguments) qui sont passés à la fonction
pour y être traités;
o Les variables locales et externes utilisés par la fonction;
o D’autres fonctions invoquées par la fonction;
o Les instructions que exécute la fonction.
A. SERGHINI 3
Exemple d’illustration
A. SERGHINI 4
A. SERGHINI 5
float Fpoly (float ,int ,int);
y=Fpoly (x ,m ,n);
A. SERGHINI 6
Arguments muets et arguments effectifs
1- Arguments muets:
Les noms des arguments figurants dans l’en-tête de la
fonction se nomment des arguments muets ou encore des
arguments formels. Leur rôle est de permettre, au sein de
la fonction, de décrire ce quelle doit faire.
2- Arguments effectifs:
Les arguments fournis (transmis) lors de l’utilisation
(l’appel) de la fonction se nomment des arguments
effectifs.
A. SERGHINI 7
L’instruction return
A. SERGHINI 8
Exercice
A. SERGHINI 9
Fonctions sans retour ou sans arguments
A. SERGHINI 10
Quand une fonction ne reçoit aucun arguments, on
place le mot clé void à la place de la liste des arguments
Par exemple:
A. SERGHINI 11
Enfin, rien n’empêche de réaliser une fonction ne
possédant ni arguments ni valeur de retour.
Par exemple:
A. SERGHINI 12
Fonctions récursives
A. SERGHINI 13
A. SERGHINI 14
Faire un programme qui calcule Cin
A. SERGHINI 15
Procédé pratique
A. SERGHINI 16
Exemple de récursivité avec deux appels
A. SERGHINI 17
- Prototype et caractéristiques d’une fonction en C++
Le passage d'arguments à une fonction se fait au moyen
d'une liste d'arguments.
La signature d’une fonction est le nombre et le type de
chacun de ses arguments.
Surcharge : Possibilité d’avoir plusieurs fonctions ayant
. le même nom mais des signatures différentes.
Possibilité d’avoir des valeurs par défaut pour les paramètres,
qui peuvent alors être sous-entendus au moment de l’appel.
Exemple
int mult (int a=2, int b=3) { return a*b; }
A. SERGHINI
Cours C++ 18
Les Références en C++
1- Déclaration d’une référence :
En plus des pointeurs, le C++ permet de créer des références.
Les références sont des synonymes d'identificateurs.
Elles permettent de manipuler une variable sous un autre nom
que celui sous laquelle cette dernière a été déclarée.
Par exemple:
Si « id » est le nom d'une variable, il est possible de créer une
référence « ref » de cette variable.
Les deux identificateurs id et ref représentent alors la même
variable, et celle-ci peut être accédée et modifiée à l'aide de
ces deux identificateurs indistinctement.
A. SERGHINI
Cours C++ 19
Toute référence doit se référer à un identificateur : il est
donc impossible de déclarer une référence sans l'initialiser.
A. SERGHINI
Cours C++ 20
Exemple . Déclaration de références
int i=0;
int &ri=i; // Référence sur la variable i.
ri=ri+i; // Double la valeur de i (et de ri).
A. SERGHINI
Cours C++ 21
2- Lien entre les pointeurs et les références
A. SERGHINI
Cours C++ 22
Cette similitude entre les pointeurs et les références se
retrouve au niveau syntaxique. Par exemple, considérons le
morceau de code suivant :
int i=0;
int *pi=&i;
*pi=*pi+1; // Manipulation de i via pi.
A. SERGHINI
Cours C++ 23
Nous constatons que la référence ri peut être identifiée
avec l'expression *pi, qui représente bien la variable i.
A. SERGHINI
Cours C++ 24
3- Passage de paramètres par variable ou par valeur
Il y a deux méthodes pour passer des variables en paramètre
dans une fonction : le passage par valeur et le passage par
variable.
3.1. Passage par valeur
La valeur de l'expression passée en paramètre est copiée
dans une variable locale. C'est cette variable qui est utilisée
pour faire les calculs dans la fonction appelée.
C’est-à-dire:
Si l'expression passée en paramètre est une variable, son
contenu est copié dans la variable locale.
Aucune modification de la variable locale dans la fonction
appelée ne modifie la variable passée en paramètre, parce que
ces modifications ne s'appliquent qu'à une copie de cette
dernière.
A. SERGHINI
Cours C++ 25
Exemple:
A. SERGHINI
Cours C++ 26
3.2. Passage par variable
A. SERGHINI
Cours C++ 27
3.3. Avantages et inconvénients des deux méthodes
Les passages par variables sont plus rapides et plus économes
en mémoire que les passages par valeur, puisque les étapes de
la création de la variable locale et la copie de la valeur ne sont
pas faites.
Il faut donc éviter les passages par valeur dans les cas
d'appels récursifs de fonction ou de fonctions travaillant avec
des grandes structures de données (matrices par exemple).
Les passages par valeurs permettent d'éviter de détruire par
mégarde les variables passées en paramètre.
Si l'on veut se prévenir de la destruction accidentelle des
paramètres passés par variable, il faut utiliser le mot clé const.
Dans ce cas, le compilateur interdira alors toute modification
de la variable dans la fonction appelée.
A. SERGHINI
Cours C++ 28
3.4. Comment passer les paramètres par variable en C ?
A. SERGHINI
Cours C++ 29
3.5. Passage de paramètres par référence
Le passage de paramètres par variable présente beaucoup
d’ inconvénients
A. SERGHINI
Cours C++ 31
Il est recommandé, pour des raisons de performances, de
passer par référence tous les paramètres dont la copie peut
prendre beaucoup de temps (en pratique, seuls les types de
base du langage pourront être passés par valeur).
A. SERGHINI
Cours C++ 32
Exemple:
A. SERGHINI
Cours C++ 33
Un autre avantage des références constantes pour les passages
par variables est que si le paramètre n'est pas une variable
ou, s'il n'est pas du bon type, une variable locale du type du
paramètre est créée et initialisée avec la valeur du paramètre
transtypé.
A. SERGHINI
Cours C++ 35
Cettedéclaration signifie que *dp est constant. En
conséquence, toute occurrence de *dp dans le programme
est remplacée par la constante.
A. SERGHINI
Cours C++ 36
On peut parfaitement définir des tableaux constants :
const int table[3] = { 1, 2, 3 };
et des pointeurs constants (ne pas confondre avec les
pointeurs sur des constantes) :
double *const dc = &d;