Cours: Conception orientée objet Chapitres I & II - Rappel (1) · 2020. 4. 2. · Cours:...

126
Les tableaux (Arrays) Les pointeurs (Pointers) Cours: Conception orientée objet Chapitres I & II - Rappel (1) - Dr. Fateh SEGHIR Email: [email protected] Sétif 1 university Faculty of Technology Department of Electrotechnic March 02, 2020 Dr. Fateh SEGHIR Tableaux et pointeurs

Transcript of Cours: Conception orientée objet Chapitres I & II - Rappel (1) · 2020. 4. 2. · Cours:...

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Cours: Conception orientée objetChapitres I & II - Rappel (1) -

    Dr. Fateh SEGHIREmail: [email protected]

    Sétif 1 universityFaculty of Technology

    Department of Electrotechnic

    March 02, 2020

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Déclaration d’un tableau

    Définition

    Un tableau fonctionne comme une variable. Il peut stocker un groupe de valeurs,toutes du même type. Ces valeurs sont enregistrées ensemble dans desemplacements mémoires consécutifs.

    Définition d’un tableau

    Pour définir un tableau; trois éléments doivent être spécifiés dans sa déclaration.1 Nom du tableau: il détermine l’identificateur à utiliser pour manipuler les

    données d’un tableau.2 Type des donnés: il spécifie le type des données stockées dans le tableau.3 Déclarateur de taille: il indique le nombre d’éléments ou de valeurs que le

    tableau peut contenir.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Déclaration d’un tableau

    Définition

    Un tableau fonctionne comme une variable. Il peut stocker un groupe de valeurs,toutes du même type. Ces valeurs sont enregistrées ensemble dans desemplacements mémoires consécutifs.

    Définition d’un tableau

    Pour définir un tableau; trois éléments doivent être spécifiés dans sa déclaration.1 Nom du tableau: il détermine l’identificateur à utiliser pour manipuler les

    données d’un tableau.2 Type des donnés: il spécifie le type des données stockées dans le tableau.3 Déclarateur de taille: il indique le nombre d’éléments ou de valeurs que le

    tableau peut contenir.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exemples de déclaration des tableaux

    Déclaration Nom du tableau Types de données Déclarateur detaille

    int days[6]; days int 6const int NUM_DAYS = 6;

    int days[NUM_DAYS]; days int 6float temperatures[100]; temperatures float 100

    string names[10]; names string 10long units[50]; units long 50

    double sizes[1200] sizes double 1200

    Remarque

    Le déclarateur de taille d’un tableau doit être une expression entière constante avecune valeur supérieure à zéro. Il peut s’agir d’un nombre fixe ou d’une constantenommée.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exemples de déclaration des tableaux

    Déclaration Nom du tableau Types de données Déclarateur detaille

    int days[6]; days int 6const int NUM_DAYS = 6;

    int days[NUM_DAYS]; days int 6float temperatures[100]; temperatures float 100

    string names[10]; names string 10long units[50]; units long 50

    double sizes[1200] sizes double 1200

    Remarque

    Le déclarateur de taille d’un tableau doit être une expression entière constante avecune valeur supérieure à zéro. Il peut s’agir d’un nombre fixe ou d’une constantenommée.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Taille mémoire occupée par un tableau

    Taille mémoire d’un tableau

    L’espace mémoire occupé par un tableau dépend de type de données utilisé ainsi queson nombre d’éléments. Cet espace peut être calculé en multipliant la taille d’unélément (souvent en octets) par le nombre d’éléments dans le tableau.

    Array Definition Number of Ele-ments

    Size of EachElement

    Size of the Ar-ray

    char letters[25]; 25 1 byte 25 bytesshort rings[100]; 100 2 bytes 200 bytesint miles[84]; 84 4 bytes 336 bytesfloat temp[12]; 12 4 bytes 48 bytesdouble distance[1000]; 1000 8 bytes 8000 bytes

    Taille mémoire via sizeof

    L’opérateur sizeof peut être aussi utilisé pour déterminer la taille mémoire occupée parun tableau

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Taille mémoire occupée par un tableau

    Taille mémoire d’un tableau

    L’espace mémoire occupé par un tableau dépend de type de données utilisé ainsi queson nombre d’éléments. Cet espace peut être calculé en multipliant la taille d’unélément (souvent en octets) par le nombre d’éléments dans le tableau.

    Array Definition Number of Ele-ments

    Size of EachElement

    Size of the Ar-ray

    char letters[25]; 25 1 byte 25 bytesshort rings[100]; 100 2 bytes 200 bytesint miles[84]; 84 4 bytes 336 bytesfloat temp[12]; 12 4 bytes 48 bytesdouble distance[1000]; 1000 8 bytes 8000 bytes

    Taille mémoire via sizeof

    L’opérateur sizeof peut être aussi utilisé pour déterminer la taille mémoire occupée parun tableau

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Taille mémoire d’un tableau via sizeof (1)

    1 # inc lude 2 using namespace std ;3 i n t main ( )4 {5 char l e t t e r s [ 2 5 ] ;6 shor t r i ngs [ 1 0 0 ] ;7 i n t mi les [ 8 4 ] ;8 f l o a t temp [ 1 2 ] ;9 double d is tance [ 1 0 0 0 ] ;

    10 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Taille mémoire d’un tableau via sizeof (2)

    13 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau

    Indices d’accès

    Chaque élément dans un tableau est accessible par son indice (subscript) qui est unnombre entier unique. Pour un tableau donné Tab de n éléments, C++ assigne:

    La valeur 0 à l’indice du premier élément du Tab.La valeur 1 à l’indice du deuxième élément du Tab.. . .

    La valeur n-1 à l’indice du dernier élément du Tab.

    1 shor t hours [ 6 ] ;2 hours [ 0 ] = 20; / /

    Store 20 i n thef i r s t element

    3 hours [ 3 ] = 30;

    Remarque

    Les autres éléments du hours ne sont pasinitialisés. Si hours est déclaré globalement , tousces éléments sont initialisés par défaut aux 0.Tandis que si hours est déclaré localement , cesvaleurs ne sont pas définies.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau

    Indices d’accès

    Chaque élément dans un tableau est accessible par son indice (subscript) qui est unnombre entier unique. Pour un tableau donné Tab de n éléments, C++ assigne:

    La valeur 0 à l’indice du premier élément du Tab.La valeur 1 à l’indice du deuxième élément du Tab.. . .

    La valeur n-1 à l’indice du dernier élément du Tab.

    1 shor t hours [ 6 ] ;2 hours [ 0 ] = 20; / /

    Store 20 i n thef i r s t element

    3 hours [ 3 ] = 30;

    Remarque

    Les autres éléments du hours ne sont pasinitialisés. Si hours est déclaré globalement , tousces éléments sont initialisés par défaut aux 0.Tandis que si hours est déclaré localement , cesvaleurs ne sont pas définies.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau par cin & cout (1)

    1 # inc lude 2 using namespace std ;3 i n t main ( )4 {5 const i n t NUM_EMPLOYEES = 6;6 i n t hours [NUM_EMPLOYEES] ;7 / / Get the hours worked by each employee .8 cout > hours [ 1 ] ;12 c in >> hours [ 2 ] ;13 c in >> hours [ 3 ] ;14 c in >> hours [ 4 ] ;15 c in >> hours [ 5 ] ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau par cin & cout (2)

    16 / / D isp lay the values i n the ar ray .17 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau par des boucles (1)Version simplifiée du programme précédent. La première boucle est utilisée pour

    enregistrer les valeurs saisies par l’objet cin.

    1 # inc lude 2 using namespace std ;3 i n t main ( )4 { const i n t NUM_EMPLOYEES = 6; i n t hours [NUM_EMPLOYEES] ;5 i n t count ; / / Loop counter6 / / I npu t the hours worked .7 f o r ( count = 0 ; count < NUM_EMPLOYEES; count ++)8 {9 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableau par des boucles (2)

    Version simplifiée du programme précédent. La deuxième boucle utilise l’objet cout

    pour afficher les valeurs entrées.

    13 / / D isp lay the contents o f the ar ray .14 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Pas de vérification des limites d’un tableau en C++ (1)

    Dépassement des limites d’un tableau

    C++ ne vérifie pas le dépassement des limites d’un tableau. Attention aux accèsd’éléments inexistants via des valeurs d’indices en dehors des limites définies.

    1 / / This program unsafe ly accesses an area of memory byw r i t i n g values beyond an ar ray ’ s boundary .

    2 / /WARNING: I f you compile and run t h i s program , i t couldcrash .

    3 # inc lude 4 using namespace std ;5 i n t main ( )6 { const i n t SIZE = 3; / / Constant f o r the ar ray s ize7 i n t values [ SIZE ] ; / / An ar ray o f 3 i n tege rs8 i n t count ; / / Loop counter v a r i a b l e

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Pas de vérification des limites d’un tableau en C++ (2)

    9 / / Attempt to s to re f i v e numbers i n the three−elementar ray .

    10 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Initialisation des éléments d’un tableau

    Déclaration d’un tableau avec initialisation d’éléments

    C++ permet d’initialiser un tableau d’éléments au moment de sa déclaration

    1 const i n t MONTHS = 12;2 i n t days [MONTHS] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 ,

    31 , 30 , 31 } ;

    Initialisation partielle d’un tableau

    Initialiser les 4 premiers éléments. Les éléments non initialisés seront mis à zéro.

    1 const i n t SIZE = 7; i n t numbers [ SIZE ] = {1 , 2 , 4 , 8 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Initialisation des éléments d’un tableau

    Déclaration d’un tableau avec initialisation d’éléments

    C++ permet d’initialiser un tableau d’éléments au moment de sa déclaration

    1 const i n t MONTHS = 12;2 i n t days [MONTHS] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 ,

    31 , 30 , 31 } ;

    Initialisation partielle d’un tableau

    Initialiser les 4 premiers éléments. Les éléments non initialisés seront mis à zéro.

    1 const i n t SIZE = 7; i n t numbers [ SIZE ] = {1 , 2 , 4 , 8 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Définition d’un tableau sans spécifier son déclarateurde taille

    Il est possible de déclarer un tableau sans spécifier sataille, à condition de fournir une liste d’initialisation.C++ rend automatiquement le tableau assez grand pourcontenir toutes les valeurs d’initialisation.Exemple de déclaration d’un tableau avec cinq élémentsde type double.

    1 double r a t i n g s [ ] = { 1 . 0 , 1 .5 , 2 .0 , 2 .5 , 3 . 0 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Définition d’un tableau sans spécifier son déclarateurde taille

    Il est possible de déclarer un tableau sans spécifier sataille, à condition de fournir une liste d’initialisation.C++ rend automatiquement le tableau assez grand pourcontenir toutes les valeurs d’initialisation.Exemple de déclaration d’un tableau avec cinq élémentsde type double.

    1 double r a t i n g s [ ] = { 1 . 0 , 1 .5 , 2 .0 , 2 .5 , 3 . 0 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Définition d’un tableau sans spécifier son déclarateurde taille

    Il est possible de déclarer un tableau sans spécifier sataille, à condition de fournir une liste d’initialisation.C++ rend automatiquement le tableau assez grand pourcontenir toutes les valeurs d’initialisation.Exemple de déclaration d’un tableau avec cinq élémentsde type double.

    1 double r a t i n g s [ ] = { 1 . 0 , 1 .5 , 2 .0 , 2 .5 , 3 . 0 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle

    Introduite avec C++11. Son format général est le suivant:

    1 f o r ( dataType rangeVar iab le : a r ray )2 statement ;

    dataType: est le type de la variable d’intervalle. Il doit être identique au type deséléments du tableau ou à un type de conversion automatique de ces éléments.

    rangeVariable: est le nom de la variable d’intervalle. Lors de la premièreitération de la boucle, elle reçoit la valeur du premier élément; lors de ladeuxième itération, elle reçoit la valeur du deuxième élément, et ainsi de suite.

    array : est le nom d’un tableau sur lequel la boucle fonctionne.statement : est une instruction qui s’exécute lors d’une itération de boucle. Pourplusieurs instructions, placez-les dans un ensemble d’accolades.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle

    Introduite avec C++11. Son format général est le suivant:

    1 f o r ( dataType rangeVar iab le : a r ray )2 statement ;

    dataType: est le type de la variable d’intervalle. Il doit être identique au type deséléments du tableau ou à un type de conversion automatique de ces éléments.

    rangeVariable: est le nom de la variable d’intervalle. Lors de la premièreitération de la boucle, elle reçoit la valeur du premier élément; lors de ladeuxième itération, elle reçoit la valeur du deuxième élément, et ainsi de suite.

    array : est le nom d’un tableau sur lequel la boucle fonctionne.statement : est une instruction qui s’exécute lors d’une itération de boucle. Pourplusieurs instructions, placez-les dans un ensemble d’accolades.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle

    Introduite avec C++11. Son format général est le suivant:

    1 f o r ( dataType rangeVar iab le : a r ray )2 statement ;

    dataType: est le type de la variable d’intervalle. Il doit être identique au type deséléments du tableau ou à un type de conversion automatique de ces éléments.

    rangeVariable: est le nom de la variable d’intervalle. Lors de la premièreitération de la boucle, elle reçoit la valeur du premier élément; lors de ladeuxième itération, elle reçoit la valeur du deuxième élément, et ainsi de suite.

    array : est le nom d’un tableau sur lequel la boucle fonctionne.statement : est une instruction qui s’exécute lors d’une itération de boucle. Pourplusieurs instructions, placez-les dans un ensemble d’accolades.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle

    Introduite avec C++11. Son format général est le suivant:

    1 f o r ( dataType rangeVar iab le : a r ray )2 statement ;

    dataType: est le type de la variable d’intervalle. Il doit être identique au type deséléments du tableau ou à un type de conversion automatique de ces éléments.

    rangeVariable: est le nom de la variable d’intervalle. Lors de la premièreitération de la boucle, elle reçoit la valeur du premier élément; lors de ladeuxième itération, elle reçoit la valeur du deuxième élément, et ainsi de suite.

    array : est le nom d’un tableau sur lequel la boucle fonctionne.statement : est une instruction qui s’exécute lors d’une itération de boucle. Pourplusieurs instructions, placez-les dans un ensemble d’accolades.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle

    Introduite avec C++11. Son format général est le suivant:

    1 f o r ( dataType rangeVar iab le : a r ray )2 statement ;

    dataType: est le type de la variable d’intervalle. Il doit être identique au type deséléments du tableau ou à un type de conversion automatique de ces éléments.

    rangeVariable: est le nom de la variable d’intervalle. Lors de la premièreitération de la boucle, elle reçoit la valeur du premier élément; lors de ladeuxième itération, elle reçoit la valeur du deuxième élément, et ainsi de suite.

    array : est le nom d’un tableau sur lequel la boucle fonctionne.statement : est une instruction qui s’exécute lors d’une itération de boucle. Pourplusieurs instructions, placez-les dans un ensemble d’accolades.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle - Exemples-

    Affichage des éléments d’un tableau.

    1 i n t [ ] numbers = { 3 , 6 , 9 } ;2 f o r ( i n t va l : numbers )3 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle - Exemples-

    Affichage des éléments d’un tableau.

    1 i n t [ ] numbers = { 3 , 6 , 9 } ;2 f o r ( i n t va l : numbers )3 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    La boucle for à base d’intervalle - Exemples-

    Affichage des éléments d’un tableau.

    1 i n t [ ] numbers = { 3 , 6 , 9 } ;2 f o r ( i n t va l : numbers )3 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exercices1 Somme et moyenne des valeurs d’un tableau numérique2 Rechercher une valeur ainsi que son nombre d’occurrences dans un tableau T.

    (recherche linéaire vs binaire). NB: La recherche bianaire nécessite que letableau T est préalablement trié.

    3 Trouver des éléments les plus élevées (max) et les plus basses (min) d’untableau numérique

    4 Comparer deux tableaux (détermine si un tableau T et autre P contiennent lesmêmes valeurs.)

    5 Permuter enter deux éléments différents d’un tableau.6 Inverser des éléments de deux tableaux T et P (une partie de T sera permuté

    avec une autre de P).7 Décalage à droite (à gauche) de un (m) éléments consécutifs d’un tableau T de

    taille n, tel-que n > m.8 Trier par ordre croissant (décroissant) des éléments d’un tableau (The Bubble

    and Selection Sorts).

    9 Modification d’un tableau avec une boucle à base d’intervalle (utilisation de

    l’opérateur &)

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Les tableaux à deux dimensionsDéclaration d’un tableau à deux dimensions: Matrice de 03 lignes et 04 colonnes

    1 double scores [ 3 ] [ 4 ] ;

    Il est très pratique de placer les accolades intérieures, qui sont optionnels, pourinitialiser les éléments de chaque ligne.

    1 i n t hours [ 3 ] [ 2 ] = { { 8 , 5 } , {7 , 9 } , {6 , 3 } } ;2 / / The same hours d e f i n i t i o n as the prev ious one3 i n t hours [ 3 ] [ 2 ] = { { 8 , 5 } ,4 {7 , 9 } ,5 {6 , 3 } } ;6 / / The same hours d e f i n i t i o n as the two prev ious ones

    ( ex t ra braces are op t i onne l )7 i n t hours [ 3 ] [ 2 ] = {8 , 5 , 7 , 9 , 6 , 3 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Les tableaux à deux dimensionsDéclaration d’un tableau à deux dimensions: Matrice de 03 lignes et 04 colonnes

    1 double scores [ 3 ] [ 4 ] ;

    Il est très pratique de placer les accolades intérieures, qui sont optionnels, pourinitialiser les éléments de chaque ligne.

    1 i n t hours [ 3 ] [ 2 ] = { { 8 , 5 } , {7 , 9 } , {6 , 3 } } ;2 / / The same hours d e f i n i t i o n as the prev ious one3 i n t hours [ 3 ] [ 2 ] = { { 8 , 5 } ,4 {7 , 9 } ,5 {6 , 3 } } ;6 / / The same hours d e f i n i t i o n as the two prev ious ones

    ( ex t ra braces are op t i onne l )7 i n t hours [ 3 ] [ 2 ] = {8 , 5 , 7 , 9 , 6 , 3 } ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Initialisation partielle d’un tableau à deux dimensions

    les accolades intérieures vous permet d’effectuer uneinitialisation partielle non-ordonnée.Dans l’exemple de la déclaration suivante:Mat[0][0] est initialisé à 1, Mat[1][0] est initialisé à 3,Mat[1][1] est initialisé à 4 et Mat[2][0] est initialisé à 5.

    1 i n t Mat [ 3 ] [ 2 ] = { { 1 } , {3 , 4 } , { 5 } } ;

    Mat[0][1] et Mat[2][1] ne sont pas initialisés.Comme certains éléments du Mat étant initialisés, cesdeux éléments sont automatiquement mis à zéro.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Initialisation partielle d’un tableau à deux dimensions

    les accolades intérieures vous permet d’effectuer uneinitialisation partielle non-ordonnée.Dans l’exemple de la déclaration suivante:Mat[0][0] est initialisé à 1, Mat[1][0] est initialisé à 3,Mat[1][1] est initialisé à 4 et Mat[2][0] est initialisé à 5.

    1 i n t Mat [ 3 ] [ 2 ] = { { 1 } , {3 , 4 } , { 5 } } ;

    Mat[0][1] et Mat[2][1] ne sont pas initialisés.Comme certains éléments du Mat étant initialisés, cesdeux éléments sont automatiquement mis à zéro.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Initialisation partielle d’un tableau à deux dimensions

    les accolades intérieures vous permet d’effectuer uneinitialisation partielle non-ordonnée.Dans l’exemple de la déclaration suivante:Mat[0][0] est initialisé à 1, Mat[1][0] est initialisé à 3,Mat[1][1] est initialisé à 4 et Mat[2][0] est initialisé à 5.

    1 i n t Mat [ 3 ] [ 2 ] = { { 1 } , {3 , 4 } , { 5 } } ;

    Mat[0][1] et Mat[2][1] ne sont pas initialisés.Comme certains éléments du Mat étant initialisés, cesdeux éléments sont automatiquement mis à zéro.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableaux à deux dimensions

    Chaque élément a deux indices (un pour sa ligne et unautre pour sa colonne).Par exemple, l’instruction suivante affecte la valeur 12.25 àl’élément de la ligne 2, colonne 1 du tableau scores.

    1 double scores [ 3 ] [ 4 ] ;2 scores [ 2 ] [ 1 ] = 12.25;

    Les boucles imbriquées sont souvent utilisées pourtraiter les données d’un tableau à deux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableaux à deux dimensions

    Chaque élément a deux indices (un pour sa ligne et unautre pour sa colonne).Par exemple, l’instruction suivante affecte la valeur 12.25 àl’élément de la ligne 2, colonne 1 du tableau scores.

    1 double scores [ 3 ] [ 4 ] ;2 scores [ 2 ] [ 1 ] = 12.25;

    Les boucles imbriquées sont souvent utilisées pourtraiter les données d’un tableau à deux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Accès aux éléments d’un tableaux à deux dimensions

    Chaque élément a deux indices (un pour sa ligne et unautre pour sa colonne).Par exemple, l’instruction suivante affecte la valeur 12.25 àl’élément de la ligne 2, colonne 1 du tableau scores.

    1 double scores [ 3 ] [ 4 ] ;2 scores [ 2 ] [ 1 ] = 12.25;

    Les boucles imbriquées sont souvent utilisées pourtraiter les données d’un tableau à deux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exemple d’utilisation des boucles imbriquées avec untableau à deux dimensions (1)

    1 / / This program c a l c u l a t e s the c lass average2 / / f o r each of the t e s t scores o f i t s s tudents3 # inc lude 4 # inc lude 5 using namespace std ;6 i n t main ( )7 {8 const i n t NUM_STUDENTS = 3; / / Number o f s tudents9 const i n t NUM_TESTS = 3; / / Number o f t e s t scores

    10 double scores [NUM_STUDENTS] [ NUM_TESTS] ;11 i n t student , t e s t ; / / Loop counters .12 double t o t a l ; / / Accumulator i s set i n the loops13 double average ; / / To hold each score ’ s c lass average

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exemple d’utilisation des boucles imbriquées avec untableau à deux dimensions (2)

    14 / / Nested loops to f i l l the ar ray w i th t e s t scores f o reach student .

    15 f o r ( s tudent = 0 ; s tudent < NUM_STUDENTS; s tudent ++)16 {17 f o r ( t e s t = 0 ; t e s t < NUM_TESTS; t e s t ++)18 {19 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exemple d’utilisation des boucles imbriquées avec untableau à deux dimensions (3)

    25 / / Get the c lass average f o r each t e s t .26 f o r ( t e s t = 0 ; t e s t < NUM_TESTS; t e s t ++)27 {28 t o t a l = 0 ; / / Reset the accumulator .29 / / Sum a column .30 f o r ( s tudent = 0 ; s tudent < NUM_STUDENTS; s tudent ++)31 t o t a l += scores [ s tudent ] [ t e s t ] ;32 average = t o t a l / NUM_STUDENTS; / / Get the average .33 / / D isp lay the c lass average .34 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Tableaux à plus de deux dimensions

    C++ vous permet aussi de créer des tableaux à plus dedeux dimensions pour modéliser les données contenuesdans plusieurs ensembles. L’exemple suivant est unedéfinition d’un tableau de trois dimensions.

    25 double seats [ 3 ] [ 5 ] [ 8 ] ;

    Tous ce que nous avons vus pour accéder et initialiserdes éléments d’un tableau à un ou deux dimensionspeuvent aisément appliqués à des tableaux de plus dedeux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Tableaux à plus de deux dimensions

    C++ vous permet aussi de créer des tableaux à plus dedeux dimensions pour modéliser les données contenuesdans plusieurs ensembles. L’exemple suivant est unedéfinition d’un tableau de trois dimensions.

    25 double seats [ 3 ] [ 5 ] [ 8 ] ;

    Tous ce que nous avons vus pour accéder et initialiserdes éléments d’un tableau à un ou deux dimensionspeuvent aisément appliqués à des tableaux de plus dedeux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    Exercices1 Calculer la somme de tous les éléments d’un tableau à

    deux dimensions.2 Calculer la somme (moyenne) des éléments de chaque

    ligne (colonne) d’un tableau à deux dimensions.3 Chercher une valeur ainsi que son nombre d’occurrences

    dans un tableau à deux dimensions.4 Trouver des éléments les plus élevées (max) et les plus

    basses (min) d’un tableau à deux dimensions.5 Cette fois-ci, (max/max) pour une (ligne/colonne) donné

    d’un tableau à deux dimensions.6 Permutation d’éléments entre deux différentes lignes

    (colonnes) d’un tableau à deux dimensions.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur d’adresse (&)Sur un PC, généralement une variable de type:

    char, occupe un (01) octet.short, occupe deux (02) octetsint, ocuppe quatre (04) octetslong et float, occupe huit (08) octets.

    1 char l e t t e r ;2 shor t number ;3 f l o a t amount ;

    letter number amount

    1200 1201 1203

    L’opérateur d’adresse &

    Sachant que chaque octet en mémoire possède une adresse uniquea, l’opérateurd’adresse & retourne l’adresse mémoire du premier octet occupé par une variable.

    aLes adresses des variables illustrées à la figure sont des valeurs arbitraires, quisont utilisées uniquement à des fins d’illustration.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur d’adresse (&)Sur un PC, généralement une variable de type:

    char, occupe un (01) octet.short, occupe deux (02) octetsint, ocuppe quatre (04) octetslong et float, occupe huit (08) octets.

    1 char l e t t e r ;2 shor t number ;3 f l o a t amount ;

    letter number amount

    1200 1201 1203

    L’opérateur d’adresse &

    Sachant que chaque octet en mémoire possède une adresse uniquea, l’opérateurd’adresse & retourne l’adresse mémoire du premier octet occupé par une variable.

    aLes adresses des variables illustrées à la figure sont des valeurs arbitraires, quisont utilisées uniquement à des fins d’illustration.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Exemple d’utilisation des opérateurs & et sizeof

    1 / / s i z e o f opera tor i s used to determine a v a r i a b l e ’ s s ize2 # inc lude 3 using namespace std ;4 i n t main ( )5 {6 i n t x = 25;7 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Variable pointeur (appelée aussi pointeur)

    Déclaration

    Pour définir un pointeur, il faut le nommer et indiquer le type de données de lavariable pour-laquelle va contenir son adresse mémoire.

    Exemple de définition d’un pointeur.

    1 i n t * p t r ;2 i n t * p t r ;

    L’astérisque * devant1 le nom de la variable indique que ptr est un pointeur.Le type de données int indique que ptr peut être utilisé pour contenir l’adressemémoire d’une variable entière.

    1Certains programmeurs préfèrent positionner l’astérisque * à côté du nom du typede données, plutôt que le nom de la variable

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Variable pointeur (appelée aussi pointeur)

    Déclaration

    Pour définir un pointeur, il faut le nommer et indiquer le type de données de lavariable pour-laquelle va contenir son adresse mémoire.

    Exemple de définition d’un pointeur.

    1 i n t * p t r ;2 i n t * p t r ;

    L’astérisque * devant1 le nom de la variable indique que ptr est un pointeur.Le type de données int indique que ptr peut être utilisé pour contenir l’adressemémoire d’une variable entière.

    1Certains programmeurs préfèrent positionner l’astérisque * à côté du nom du typede données, plutôt que le nom de la variable

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Variable pointeur (appelée aussi pointeur)

    Déclaration

    Pour définir un pointeur, il faut le nommer et indiquer le type de données de lavariable pour-laquelle va contenir son adresse mémoire.

    Exemple de définition d’un pointeur.

    1 i n t * p t r ;2 i n t * p t r ;

    L’astérisque * devant1 le nom de la variable indique que ptr est un pointeur.Le type de données int indique que ptr peut être utilisé pour contenir l’adressemémoire d’une variable entière.

    1Certains programmeurs préfèrent positionner l’astérisque * à côté du nom du typede données, plutôt que le nom de la variable

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Variable pointeur (appelée aussi pointeur)

    Déclaration

    Pour définir un pointeur, il faut le nommer et indiquer le type de données de lavariable pour-laquelle va contenir son adresse mémoire.

    Exemple de définition d’un pointeur.

    1 i n t * p t r ;2 i n t * p t r ;

    L’astérisque * devant1 le nom de la variable indique que ptr est un pointeur.Le type de données int indique que ptr peut être utilisé pour contenir l’adressemémoire d’une variable entière.

    1Certains programmeurs préfèrent positionner l’astérisque * à côté du nom du typede données, plutôt que le nom de la variable

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Enregistrer l’adresse d’une variable dans un pointeur

    1 i n t x = 25; / / i n t v a r i a b l e2 i n t * p t r = n u l l p t r ; / / n u l l p t r i s supported by the

    standard C++11 but you can rep lace i t w i th NULL or 0 .3 p t r = &x ; / / Store the address o f x i n p t r

    0x7e00

    Ptr

    X

    Adresse of x: 0x7e00

    25

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Utilisation de l’opérateur indirect * (1).

    Les pointeurs vous permet d’accéder indirectement2 et de modifier la variable pointée.

    1 # inc lude 2 using namespace std ;3

    4 i n t main ( )5 {6 i n t x = 25; / / i n t v a r i a b l e7 i n t * p t r = n u l l p t r ; / / Po in te r va r iab le , can po in t to

    an i n t8 p t r = &x ; / / Store the address o f x i n p t r

    2L’accès se fait via l’opérateur indirect (indirection operator ), qui est l’astérisque *.Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Utilisation de l’opérateur indirect * (2).

    9 / / Use both x and p t r to d i sp lay the value i n x .10 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    La relation entre les tableaux et les pointeursLe nom d’un tableau, sans crochets ni indice, représente en fait l’adresse de départ dutableau. Cela signifie qu’un nom de tableau est vraiment un pointeur.

    1 / / This program shows an ar ray name being dereferencedwi th the * opera tor .

    2 # inc lude 3 using namespace std ;4 i n t main ( )5 {6 shor t numbers [ ] = {10 , 20 , 30 , 40 , 50 } ;7 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Accès aux données d’un tableau par l’opérateurindirect * (1)

    1 # inc lude 2 using namespace std ;3 i n t main ( )4 {5 const i n t SIZE = 5; / / Size o f the ar ray6 i n t numbers [ SIZE ] ; / / Array o f i n t ege rs7 i n t count ; / / Counter v a r i a b l e8

    9 / / Get values to s to re i n the ar ray .10 / / Use p o i n t e r no ta t i on ins tead of subsc r i p t s .11 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Accès aux données d’un tableau par l’opérateurindirect * (2)

    // Display the values in the array. Use pointer notation instead of subscripts.

    14 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Accès aux données d’un tableau par l’opérateurindirect * (2)

    // Display the values in the array. Use pointer notation instead of subscripts.

    14 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Accès aux données d’un tableau par l’opérateurindirect * (2)

    // Display the values in the array. Use pointer notation instead of subscripts.

    14 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Accès aux données d’un tableau par l’opérateurindirect * (2)

    // Display the values in the array. Use pointer notation instead of subscripts.

    14 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Tableaux vs pointeursLorsque vous travaillez avec des tableaux, rappelez-vousla règle suivante:

    array [index] est équivalent à *(array + index)La seule différence entre les noms de tableaux et lespointeurs est que vous ne pouvez pas modifier l’adressepointée par un nom de tableau.

    Soit les déclarations suivantes

    1 double readings [ 2 0 ] , t o t a l s [ 2 0 ] ;2 double * dp t r = n u l l p t r ;

    Instructions légales

    1 dp t r = readings ;2 dp t r = t o t a l s ;

    Instructions illégales

    1 readings = t o t a l s ;2 t o t a l s = dp t r ;

    Les noms des tableaux sont des pointeurs constants.Vous ne pouvez pas leur faire pointer autre chose que letableau qu’ils représentent.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Tableaux vs pointeursLorsque vous travaillez avec des tableaux, rappelez-vousla règle suivante:

    array [index] est équivalent à *(array + index)La seule différence entre les noms de tableaux et lespointeurs est que vous ne pouvez pas modifier l’adressepointée par un nom de tableau.

    Soit les déclarations suivantes

    1 double readings [ 2 0 ] , t o t a l s [ 2 0 ] ;2 double * dp t r = n u l l p t r ;

    Instructions légales

    1 dp t r = readings ;2 dp t r = t o t a l s ;

    Instructions illégales

    1 readings = t o t a l s ;2 t o t a l s = dp t r ;

    Les noms des tableaux sont des pointeurs constants.Vous ne pouvez pas leur faire pointer autre chose que letableau qu’ils représentent.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Tableaux vs pointeursLorsque vous travaillez avec des tableaux, rappelez-vousla règle suivante:

    array [index] est équivalent à *(array + index)La seule différence entre les noms de tableaux et lespointeurs est que vous ne pouvez pas modifier l’adressepointée par un nom de tableau.

    Soit les déclarations suivantes

    1 double readings [ 2 0 ] , t o t a l s [ 2 0 ] ;2 double * dp t r = n u l l p t r ;

    Instructions légales

    1 dp t r = readings ;2 dp t r = t o t a l s ;

    Instructions illégales

    1 readings = t o t a l s ;2 t o t a l s = dp t r ;

    Les noms des tableaux sont des pointeurs constants.Vous ne pouvez pas leur faire pointer autre chose que letableau qu’ils représentent.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Arithmétique des pointeurs (1)Certaines opérations mathématiques peuvent être effectuées sur des pointeurs (p. ex.,l’addition et la soustraction).

    1 / / Using a p o i n t e r to d i sp lay the contents o f an ar ray .2 # inc lude 3 using namespace std ;4 i n t main ( )5 {6 const i n t SIZE = 8;7 i n t se t [ SIZE ] = {5 , 10 , 15 , 20 , 25 , 30 , 35 , 40 } ;8 i n t * numPtr = n u l l p t r ; / / Po in te r9 i n t count ; / / Counter v a r i a b l e f o r loops

    10 / / Make numPtr po i n t to the set ar ray .11 numPtr = set ;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Arithmétique des pointeurs (2)

    12 / / Use the p o i n t e r to d i sp lay the ar ray contents .13 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Opérateurs arithmétiques et de comparaison sur despointeurs

    Les opérations arithmétiques autorisées avec des pointeurs

    Les opérateurs ++ et - - peuvent être utilisés pour incrémenter ou décrémenterun pointeur.

    Un entier peut être ajouté ou soustrait à un pointeur. Ceci peut être effectué avecles opérateurs + et - ou les opérateurs += et -=.

    Un pointeur peut être soustrait d’un autre pointeur.

    Les opérateurs relationnels pour comparer des pointeurs

    Si une adresse mémoire vient avant une autre, la première adresse estconsidérée comme “ inférieure à” la seconde.Les opérateurs relationnels (< , , >= , == et !=) de C ++ peuvent êtreutilisés pour comparer les valeurs de pointeur.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Opérateurs arithmétiques et de comparaison sur despointeurs

    Les opérations arithmétiques autorisées avec des pointeurs

    Les opérateurs ++ et - - peuvent être utilisés pour incrémenter ou décrémenterun pointeur.

    Un entier peut être ajouté ou soustrait à un pointeur. Ceci peut être effectué avecles opérateurs + et - ou les opérateurs += et -=.

    Un pointeur peut être soustrait d’un autre pointeur.

    Les opérateurs relationnels pour comparer des pointeurs

    Si une adresse mémoire vient avant une autre, la première adresse estconsidérée comme “ inférieure à” la seconde.Les opérateurs relationnels (< , , >= , == et !=) de C ++ peuvent êtreutilisés pour comparer les valeurs de pointeur.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Opérateurs arithmétiques et de comparaison sur despointeurs

    Les opérations arithmétiques autorisées avec des pointeurs

    Les opérateurs ++ et - - peuvent être utilisés pour incrémenter ou décrémenterun pointeur.

    Un entier peut être ajouté ou soustrait à un pointeur. Ceci peut être effectué avecles opérateurs + et - ou les opérateurs += et -=.

    Un pointeur peut être soustrait d’un autre pointeur.

    Les opérateurs relationnels pour comparer des pointeurs

    Si une adresse mémoire vient avant une autre, la première adresse estconsidérée comme “ inférieure à” la seconde.Les opérateurs relationnels (< , , >= , == et !=) de C ++ peuvent êtreutilisés pour comparer les valeurs de pointeur.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Opérateurs arithmétiques et de comparaison sur despointeurs

    Les opérations arithmétiques autorisées avec des pointeurs

    Les opérateurs ++ et - - peuvent être utilisés pour incrémenter ou décrémenterun pointeur.

    Un entier peut être ajouté ou soustrait à un pointeur. Ceci peut être effectué avecles opérateurs + et - ou les opérateurs += et -=.

    Un pointeur peut être soustrait d’un autre pointeur.

    Les opérateurs relationnels pour comparer des pointeurs

    Si une adresse mémoire vient avant une autre, la première adresse estconsidérée comme “ inférieure à” la seconde.Les opérateurs relationnels (< , , >= , == et !=) de C ++ peuvent êtreutilisés pour comparer les valeurs de pointeur.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Opérateurs arithmétiques et de comparaison sur despointeurs

    Les opérations arithmétiques autorisées avec des pointeurs

    Les opérateurs ++ et - - peuvent être utilisés pour incrémenter ou décrémenterun pointeur.

    Un entier peut être ajouté ou soustrait à un pointeur. Ceci peut être effectué avecles opérateurs + et - ou les opérateurs += et -=.

    Un pointeur peut être soustrait d’un autre pointeur.

    Les opérateurs relationnels pour comparer des pointeurs

    Si une adresse mémoire vient avant une autre, la première adresse estconsidérée comme “ inférieure à” la seconde.Les opérateurs relationnels (< , , >= , == et !=) de C ++ peuvent êtreutilisés pour comparer les valeurs de pointeur.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs sur des objets constantsComment déclarer un pointeur qui pointe sur le tableau constant suivant?

    1 const i n t SIZE = 6;2 const double payRates [ SIZE ] = { 18.55 , 17.45 ,3 12.85 , 14.97 ,4 10.35 , 18.89 } ;

    Déclaration d’un pointeur sur un objet constant

    Pour passer l’adresse du tableau payRates vers un pointeur, ce dernier doit êtredéclaré en tant que pointeur vers un const double.

    1 const double * ra tes = payRates ;

    const est appliqué à l’objet pointé par rates, pas au pointeur rates lui-même.Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs sur des objets constantsComment déclarer un pointeur qui pointe sur le tableau constant suivant?

    1 const i n t SIZE = 6;2 const double payRates [ SIZE ] = { 18.55 , 17.45 ,3 12.85 , 14.97 ,4 10.35 , 18.89 } ;

    Déclaration d’un pointeur sur un objet constant

    Pour passer l’adresse du tableau payRates vers un pointeur, ce dernier doit êtredéclaré en tant que pointeur vers un const double.

    1 const double * ra tes = payRates ;

    const est appliqué à l’objet pointé par rates, pas au pointeur rates lui-même.Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs sur des objets constantsComment déclarer un pointeur qui pointe sur le tableau constant suivant?

    1 const i n t SIZE = 6;2 const double payRates [ SIZE ] = { 18.55 , 17.45 ,3 12.85 , 14.97 ,4 10.35 , 18.89 } ;

    Déclaration d’un pointeur sur un objet constant

    Pour passer l’adresse du tableau payRates vers un pointeur, ce dernier doit êtredéclaré en tant que pointeur vers un const double.

    1 const double * ra tes = payRates ;

    const est appliqué à l’objet pointé par rates, pas au pointeur rates lui-même.Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Exemple d’un pointeur vers un objet constant

    1 # inc lude # inc lude 2 using namespace std ;3 i n t main ( )4 { const i n t SIZE = 6;5 const double payRates [ SIZE ] = { 18.55 , 17.45 ,6 12.85 , 14.97 ,7 10.35 , 18 .89 } ;8 const double * ra tes = payRates ;9 / / Set numeric output f o r m a t t i n g .

    10 cout

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constantsOn peut utiliser le mot clé const pour définir un pointeur constant.

    1 i n t value = 22;2 i n t * const p t r = &value ;

    Différence entre pointeur sur un objet constant et pointeur constant

    Un pointeur sur un objet constant pointe sur un élément constant. Lesdonnées sur lesquelles pointe le pointeur ne peuvent pas changer, mais lepointeur lui-même peut changer.

    Avec un pointeur constant, c’est le pointeur lui-même qui est constant. Une foisque le pointeur est initialisé avec une adresse, il ne peut plus pointer vers uneautre adresse mémoire.

    1 * p t r = 0 ; / /We can change the data t h a t p t r po in t s to .2 p t r = 0 ; / /ERROR! ! Cannot change the contents o f p t r .

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constantsOn peut utiliser le mot clé const pour définir un pointeur constant.

    1 i n t value = 22;2 i n t * const p t r = &value ;

    Différence entre pointeur sur un objet constant et pointeur constant

    Un pointeur sur un objet constant pointe sur un élément constant. Lesdonnées sur lesquelles pointe le pointeur ne peuvent pas changer, mais lepointeur lui-même peut changer.

    Avec un pointeur constant, c’est le pointeur lui-même qui est constant. Une foisque le pointeur est initialisé avec une adresse, il ne peut plus pointer vers uneautre adresse mémoire.

    1 * p t r = 0 ; / /We can change the data t h a t p t r po in t s to .2 p t r = 0 ; / /ERROR! ! Cannot change the contents o f p t r .

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constantsOn peut utiliser le mot clé const pour définir un pointeur constant.

    1 i n t value = 22;2 i n t * const p t r = &value ;

    Différence entre pointeur sur un objet constant et pointeur constant

    Un pointeur sur un objet constant pointe sur un élément constant. Lesdonnées sur lesquelles pointe le pointeur ne peuvent pas changer, mais lepointeur lui-même peut changer.

    Avec un pointeur constant, c’est le pointeur lui-même qui est constant. Une foisque le pointeur est initialisé avec une adresse, il ne peut plus pointer vers uneautre adresse mémoire.

    1 * p t r = 0 ; / /We can change the data t h a t p t r po in t s to .2 p t r = 0 ; / /ERROR! ! Cannot change the contents o f p t r .

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constants sur des objets constants

    Vous pouvez également avoir des pointeurs constants sur desobjets constants.

    1 i n t value = 22;2 const i n t * const p t r = &value ;

    ptr est un pointeur constant, nous ne pouvons pas écrirede code qui fasse pointer ptr vers une autre variable (vousne pouvez pas changer le contenu de ptr ).ptr est un pointeur vers un objet constant, nous nepouvons pas l’utiliser pour changer le contenu de lavariable value.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constants sur des objets constants

    Vous pouvez également avoir des pointeurs constants sur desobjets constants.

    1 i n t value = 22;2 const i n t * const p t r = &value ;

    ptr est un pointeur constant, nous ne pouvons pas écrirede code qui fasse pointer ptr vers une autre variable (vousne pouvez pas changer le contenu de ptr ).ptr est un pointeur vers un objet constant, nous nepouvons pas l’utiliser pour changer le contenu de lavariable value.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Pointeurs constants sur des objets constants

    Vous pouvez également avoir des pointeurs constants sur desobjets constants.

    1 i n t value = 22;2 const i n t * const p t r = &value ;

    ptr est un pointeur constant, nous ne pouvons pas écrirede code qui fasse pointer ptr vers une autre variable (vousne pouvez pas changer le contenu de ptr ).ptr est un pointeur vers un objet constant, nous nepouvons pas l’utiliser pour changer le contenu de lavariable value.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Sommaire1 Les tableaux (Arrays)

    Déclaration d’un tableauTaille mémoire occupée par un tableauAccès aux éléments d’un tableauInitialisation des éléments d’un tableauLa boucle for à base d’intervalleTableaux à plusieurs dimensions

    2 Les pointeurs (Pointers)Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Allocation dynamique de la mémoire

    Supposons que vous souhaitiez écrire un programme decalcul de la moyenne générale d’un étudiant donné pourun nombre quelconque de modules.

    Évidemment, le programme serait très polyvalent, maiscomment conserver en mémoire les notes des moyennesdes modules concernés si vous ne connaissez pas sonnombre (c-à-d. nombre de variables à définir )?Tout simplement, vous permettez au programme de créerses propres variables “à la volée”.

    Cette opération s’appelle l’allocation dynamique demémoire (dynamic memory allocation) et n’est possibleque par l’utilisation de pointeurs.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Allocation dynamique de la mémoire

    Supposons que vous souhaitiez écrire un programme decalcul de la moyenne générale d’un étudiant donné pourun nombre quelconque de modules.

    Évidemment, le programme serait très polyvalent, maiscomment conserver en mémoire les notes des moyennesdes modules concernés si vous ne connaissez pas sonnombre (c-à-d. nombre de variables à définir )?Tout simplement, vous permettez au programme de créerses propres variables “à la volée”.

    Cette opération s’appelle l’allocation dynamique demémoire (dynamic memory allocation) et n’est possibleque par l’utilisation de pointeurs.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Allocation dynamique de la mémoire

    Supposons que vous souhaitiez écrire un programme decalcul de la moyenne générale d’un étudiant donné pourun nombre quelconque de modules.

    Évidemment, le programme serait très polyvalent, maiscomment conserver en mémoire les notes des moyennesdes modules concernés si vous ne connaissez pas sonnombre (c-à-d. nombre de variables à définir )?Tout simplement, vous permettez au programme de créerses propres variables “à la volée”.

    Cette opération s’appelle l’allocation dynamique demémoire (dynamic memory allocation) et n’est possibleque par l’utilisation de pointeurs.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    Allocation dynamique de la mémoire

    Supposons que vous souhaitiez écrire un programme decalcul de la moyenne générale d’un étudiant donné pourun nombre quelconque de modules.

    Évidemment, le programme serait très polyvalent, maiscomment conserver en mémoire les notes des moyennesdes modules concernés si vous ne connaissez pas sonnombre (c-à-d. nombre de variables à définir )?Tout simplement, vous permettez au programme de créerses propres variables “à la volée”.

    Cette opération s’appelle l’allocation dynamique demémoire (dynamic memory allocation) et n’est possibleque par l’utilisation de pointeurs.

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur new (1)Supposant qu’un programme a un pointeur vers un entier.

    1 i n t * i p t r = n u l l p t r ;

    L’instruction suivante demande à l’ordinateur d’allouer suffisamment demémoire pour une nouvelle variable de type int.

    1 i p t r = new i n t ;

    L’opérande de l’opérateur new est le type de données de la variable en cours decréation. iptr contiendra l’adresse mémoire nouvellement allouée.Une valeur peut être stockée dans cette variable en déréférencant le pointeur iptr

    1 * i p t r = 25;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur new (1)Supposant qu’un programme a un pointeur vers un entier.

    1 i n t * i p t r = n u l l p t r ;

    L’instruction suivante demande à l’ordinateur d’allouer suffisamment demémoire pour une nouvelle variable de type int.

    1 i p t r = new i n t ;

    L’opérande de l’opérateur new est le type de données de la variable en cours decréation. iptr contiendra l’adresse mémoire nouvellement allouée.Une valeur peut être stockée dans cette variable en déréférencant le pointeur iptr

    1 * i p t r = 25;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur new (1)Supposant qu’un programme a un pointeur vers un entier.

    1 i n t * i p t r = n u l l p t r ;

    L’instruction suivante demande à l’ordinateur d’allouer suffisamment demémoire pour une nouvelle variable de type int.

    1 i p t r = new i n t ;

    L’opérande de l’opérateur new est le type de données de la variable en cours decréation. iptr contiendra l’adresse mémoire nouvellement allouée.Une valeur peut être stockée dans cette variable en déréférencant le pointeur iptr

    1 * i p t r = 25;

    Dr. Fateh SEGHIR Tableaux et pointeurs

  • Les tableaux (Arrays)Les pointeurs (Pointers)

    Obtenir l’adresse d’une variableCréation et utilisation des pointeursLa relation entre les tableaux et les pointeursArithmétique, comparaison et initialisation des pointeursPointeurs const/non-const sur objets const/non-constAllocation dynamique de la mémoire

    L’opérateur new (1)Supposant qu’un programme a un pointeur vers un entier.

    1 i n t * i p t r = n u l l p t r ;

    L’instruction suivante demande à l’ordinateur d’allouer suffisamment demémoire po