Perfectionnement à la programmation en C — Licence 2 Informatique

HomeResearchTeaching

Exercice 2.3

  1. Voir le cours.

  2. Voir le cours.

  1. 23 est une valeur droite.

  2. num est ici une valeur droite. Elle peut aussi être une valeur gauche dans d’autres contextes (comme par exemple dans num = 25).

  3. ptr est ici une valeur droite. Même remarque que pour la question précédente.

  4. *ptr est ici une valeur droite. Même remarque que pour la question précédente.

  5. La première occurrence de num est une valeur gauche : elle dénote le conteneur dont la valeur est mise à jour. La deuxième occurrence de num est une valeur droite : elle fait référence à la valeur de num. La sous-expression num + 1 est une valeur droite. L’expression toute entière num = num + 1 est une valeur droite. Elle porte pour valeur la valeur affectée (c’est-à-dire l’ancienne valeur de num plus 1).

  6. *ptr est une valeur gauche : elle dénote le conteneur situé en mémoire à l’adresse ptr. num est une valeur droite. L’expression toute entière est une valeur droite.

  7. Même remarque que pour la question (e).

  8. ptr est une valeur droite (qui peut dans d’autres contextes être une valeur gauche). ptr + 2 est toujours une valeur droite. *(ptr + 2) est ici une valeur droite mais peut être une valeur gauche dans certains contextes.

  9. ptr est une valeur droite (qui peut dans d’autres contextes être une valeur gauche). ptr + 2 est toujours une valeur droite. À la différence de la question précédente, *(ptr + 2) est une valeur gauche puisqu’elle désigne le conteneur à l’adresse spécifiée dont la valeur est mise à jour.

    Noter ici la subtilité : si x est un pointeur de type T * et v est une valeur de type T, dans l’expression *x = v, la sous-expression x est une valeur droite mais la sous-expression *x est une valeur gauche.

  10. &num est toujours une valeur gauche. Il est en effet impossible de réaliser une affectation sur &num. Ceci reviendrait à tenter de modifier l’adresse d’une variable, ce qui est impossible.

  11. ptr est une valeur gauche. &num est une valeur droite. ptr = &num est une valeur droite.

  12. *&ptr dénote l’entité à l’adresse de ptr, soit donc ptr. Cette expression est donc équivalente à ptr. Cette dernière est une valeur droite ici mais peut être une valeur gauche dans d’autres contextes.

  13. num est une valeur droite. fct_1(num) est une valeur droite.

  14. &num est une valeur droite. fct_2(&num) est une valeur droite.

  15. ptr est une valeur droite. fct_2(ptr) est une valeur droite.