UdMHaut
UdMBAS

IFT1166
Programmation Orientée Objet avec C++

Département d'informatique et de recherche opérationnelle

Direction de l'enseignement de service en informatique
 

Image C++
 
Été 2008

Accueil

Professeurs et
Démonstrateurs

Horaires et locaux

Notes de cours

Cours
après Cours

Démonstrations
et devoirs

Examens

Liens utiles

Au sujet du
livre de cours

Consultez vos notes

Foire aux questions
(FAQ)

Sessions antérieures

  Démonstration #5  
 
Dernière mise à jour : sam 03 mai 2008 14:18:56 EDT
 

Buts:

  • [Pointeurs].

Pointeurs

  • Q1: Comment savoir qu'un littérale numérique est une adresse mémoire?

  • Q2: Quelles sont les deux utilisations du symboles * en C++??

  • Q3: Quel est le rôle de l'opérateur de déréférence?

  • Q4: Sachant que:
        int cercle_id;
        int *cercle_id_adresse;
        double rayon;
        double *rayon_adresse;
    

    Les expressions suivantes sont-elles correctes? Dites pourquoi.

    • a.
      cercle_id = FFF3;
      

    • b.
      cercle_id_adresse = FFF3;
      

    • c.
      cercle_id_adresse = rayon_adresse;
      

    • d.
      rayon_adresse = *rayon;
      

    • e.
      rayon = *rayon_adresse;
      

  • Q5: Soient les déclarations C++ suivantes:
    int a[5] = {1,2,3,4,5};
    int* b;
    double c[3] = {6,7,8};
    double* d;
    

    Les expressions suivantes sont-elles correctes? Dites pourquoi.

    • a.
      b = a[0];
      

    • b.
      cout << b+1 << endl;
      

    • c.
      b = &c[2];
      

    • d.
      d=FFEE;
      

    • e.
      d=&c[3];
      
  • Q6: Les déclarations suivantes sont-elles correctes? Dites pourquoi.

    • a.
      delete array;
      

    • b.
      new [8];
      

    • c.
      new double[8];
      

    • d.
      delete [10] array;
      

    • e.
      new[1] = 3;
      
  • Q7: Les déclarations suivantes sont-elles correctes? Dites pourquoi.

    • a.
      char *paa = "aa" "bb" "cc";
      

    • b.
      char* pbb = "abc[3]";
      

    • c.
      char* pcc[3] = {"a","b","c[3]"};
      

    • d.
      char* pdd[2] = {"aa" "bb" "cc"};
      

  • Q8: Expliquer la sortie obtenue suite à l'exécution du programme suivant: demo5exo8.cpp.

  • Q9: Écrire un programme qui permet de remplir un tableau à deux dimensions avec des valeurs entières (int) comprises entre 1 et 50. Utiliser un pointeur pour afficher en sortie les valeurs stockées dans le tableau. L'affichage en sortie doit correspondre à ce qui suit:
         1  2  3  4  5  6  7  8  9 10
        11 12 13 14 15 16 17 18 19 20
        21 22 23 24 25 26 27 28 29 30
        31 32 33 34 35 36 37 38 39 40
        41 42 43 44 45 46 47 48 49 50
    

  • Q10: Soit les instructions suivantes:
        char *p;        // ligne -1-
        const char *q;  // ligne -2-
        char &r;        // ligne -3-
        char t[10];     // ligne -4-
        q = p;          // ligne -5-
        r = p;          // ligne -6-
        char &s = *p;   // ligne -7-
        p = &s;         // ligne -8-
        s = p;          // ligne -9-
        p = s;          // ligne -10-
        s = *p;         // ligne -11-
        *p = s;         // ligne -12-
        t = p;          // ligne -13-
        p = t;          // ligne -14-
        *t = *p;        // ligne -15-
    

    Indiquez, pour chacune des lignes précédentes: Lignes syntaxiquement correctes et lignes syntaxiquement incorrectes. Dans le cas des lignes incorrectes, dites pourquoi ces lignes sont syntaxiquement incorrectes et corrigez-les.

  • Q11: En supposant que:

    • a. Les pointeurs, les variables du type int et float sont tous codés sur 4 octets.

    • b. La variable g_ptr se trouve à l'adresse xFF30.

    • c. Les variables sont ordonnées dans cet ordre:
      g_ptr f_ptr b_ptr g f e d c b a
      

    Calculer l'adresse hexadécimale (en mémoire) et la valeur associée pour chacune des variables et cela après l'exécution du programme suivant: demo5exo11.cpp.




pift1166@iro.umontreal.ca
[top]