QCM : Maîtrise des pointeurs en C/C++ — 12 questions

Questions et réponses du QCM

1. Comment doit-on utiliser un pointeur pour modifier la valeur d’une variable à laquelle il fait référence ?

En assignant une nouvelle adresse à l’opérateur & du pointeur.
En utilisant l’opérateur * pour accéder à la valeur pointée et lui assigner une nouvelle valeur.
En utilisant simplement le nom du pointeur.
En utilisant l’opérateur & devant la variable pour obtenir son adresse.

En utilisant l’opérateur * pour accéder à la valeur pointée et lui assigner une nouvelle valeur.

Explication

Pour modifier la valeur d’une variable via un pointeur, il faut utiliser le déréférencement `*` du pointeur, puis lui assigner la nouvelle valeur. Les autres options sont incorrectes : l’assignation à l’opérateur `&` ne modifie pas la valeur, mais l’adresse ; utiliser simplement le nom du pointeur n’accède pas à la valeur ; et l’opérateur `&` devant une variable donne son adresse, pas sa valeur.

2. À quel moment la déclaration d’un pointeur doit-elle être effectuée dans un programme pour assurer une manipulation correcte des adresses mémoire ?

Après avoir utilisé le pointeur pour accéder à une variable
Après avoir initialisé le pointeur à NULL
Lors de la libération de la mémoire avec free ou delete
Avant de faire l’adressage avec l’opérateur &

Avant de faire l’adressage avec l’opérateur &

Explication

La déclaration du pointeur doit intervenir avant toute opération d’adressage ou d’utilisation pour garantir qu’il existe une variable de type pointeur prête à recevoir une adresse. En déclarant le pointeur avant d’effectuer l’adressage avec &, on évite des erreurs de compilation ou d’utilisation de variables non déclarées. Les autres options concernent des opérations qui doivent venir après la déclaration, comme l’utilisation ou la libération, mais pas la déclaration elle-même.

3. Quelle est la signification exacte de l'adressage et du déréférencement dans la gestion de mémoire en programmation ?

L'adressage permet de récupérer l'adresse d'une variable, le déréférencement permet d'accéder ou de modifier la valeur pointée.
L'adressage consiste à initialiser une variable, le déréférencement à la désinitialiser.
L'adressage consiste à allouer de la mémoire, et le déréférencement à la libérer.
L'adressage permet de copier une variable, le déréférencement de la supprimer.

L'adressage permet de récupérer l'adresse d'une variable, le déréférencement permet d'accéder ou de modifier la valeur pointée.

Explication

L'adressage est l'opération de récupération de l'adresse mémoire d'une variable à l'aide de l'opérateur `&`, tandis que le déréférencement, avec l'opérateur `*`, permet d'accéder ou de modifier la valeur stockée à l'adresse mémoire pointée par un pointeur.

4. Quelle est la conséquence d’un mauvais usage des pointeurs pour accéder aux membres d’une structure en C/C++ ?

Cela permet de réduire la consommation mémoire en évitant de stocker les membres de la structure.
Cela n’a aucune conséquence, car les pointeurs sont sûrs par définition.
Cela améliore la vitesse d’accès aux données, rendant le programme plus efficace.
Cela peut entraîner des accès à des zones mémoire non allouées ou incorrectes, provoquant des comportements erratiques.

Cela peut entraîner des accès à des zones mémoire non allouées ou incorrectes, provoquant des comportements erratiques.

Explication

Un mauvais usage des pointeurs lors de l’accès aux membres d’une structure peut entraîner des accès à des zones mémoire non allouées ou incorrectes, provoquant des comportements erratiques ou des erreurs d’exécution. La réponse correcte reflète cette conséquence négative, tandis que les autres options sont fausses ou exagérément optimistes.

5. Quelle est la principale différence entre un tableau et un pointeur initialisé à l'adresse du premier élément d'un tableau ?

Le pointeur, initialisé à l'adresse du premier élément, permet de parcourir les éléments du tableau par arithmétique, alors que le tableau lui-même ne peut pas être parcouru de cette façon.
Le tableau est une zone mémoire fixe tandis que le pointeur peut être réassigné à une autre adresse.
Le tableau contient la taille de la mémoire allouée, alors que le pointeur ne connaît pas cette taille.
Le tableau ne peut pas être modifié après sa déclaration, alors que le pointeur peut modifier la mémoire qu'il pointe.

Le pointeur, initialisé à l'adresse du premier élément, permet de parcourir les éléments du tableau par arithmétique, alors que le tableau lui-même ne peut pas être parcouru de cette façon.

Explication

Un pointeur initialisé à l’adresse du premier élément d’un tableau permet de parcourir ce tableau par arithmétique de pointeurs (incrémentation). En revanche, un tableau ne peut pas être parcouru par incrémentation du nom lui-même, car il s’agit d’une zone mémoire fixe et contiguë, mais le pointeur qui pointe vers son premier élément peut être déplacé pour accéder à tous les éléments.

6. Quelle est la caractéristique principale du passage d’un paramètre par pointeur dans une fonction en C/C++ ?

Il ne fonctionne qu’avec des types primitifs comme int ou float
Il permet de modifier la variable d’origine en passant son adresse
Il crée une copie indépendante de la variable d’origine
Il empêche la fonction de modifier la variable d’origine

Il permet de modifier la variable d’origine en passant son adresse

Explication

Le passage par pointeur transmet l’adresse mémoire de la variable, permettant ainsi à la fonction de la modifier directement en utilisant le déréférencement. Les autres options sont incorrectes : la copie indépendante correspond au passage par valeur, et il n’y a pas de restriction aux types primitifs.

7. Quel est le rôle principal des pointeurs sur fonctions en programmation C/C++ ?

Gérer la mémoire dynamique des fonctions
Faciliter l'accès aux variables globales
Permettre l'appel indirect de fonctions
Permettre le stockage d'une adresse mémoire

Permettre l'appel indirect de fonctions

Explication

Les pointeurs sur fonctions sont principalement utilisés pour stocker l'adresse d'une fonction afin de l'appeler indirectement, ce qui facilite la programmation orientéeévénements ou la gestion de comportements dynamiques. Les autres options concernent des usages différents des pointeurs, mais ne décrivent pas leur rôle fondamental.

8. Quelle affirmation décrit correctement un pointeur double en C/C++ ?

C'est un pointeur qui contient l'adresse d'une fonction.
C'est un pointeur qui pointe vers une variable de type double.
C'est un pointeur qui permet d'accéder directement à une structure complexe.
C'est un pointeur qui stocke l'adresse d'un autre pointeur.

C'est un pointeur qui stocke l'adresse d'un autre pointeur.

Explication

Un pointeur double est une variable qui stocke l'adresse mémoire d’un autre pointeur, permettant une double indirection. La syntaxe typique de déclaration est `T **idPtr;`. La seule option qui correspond à cette définition est la deuxième, qui indique qu'il stocke l'adresse d’un autre pointeur.

9. Qui est crédité d’avoir formulé ou proposé le concept lié aux risques associés aux pointeurs en programmation ?

Ken Thompson
Bjarne Stroustrup
Dennis Ritchie
Brian Kernighan

Dennis Ritchie

Explication

Dennis Ritchie, créateur du langage C, a été une figure centrale dans la formalisation et la mise en évidence des risques liés à l’utilisation des pointeurs, notamment dans la gestion mémoire et la programmation système. Les autres figures, bien qu'importantes dans l’histoire de l’informatique, sont moins directement associées à ce concept précis : Stroustrup est connu pour C++, Kernighan et Thompson pour Unix et la programmation en C. La question attribue donc à Ritchie la contribution spécifique à la conceptualisation des risques pointeurs.

10. Comment appliquer l'allocation dynamique pour ajuster la taille d’un tableau lors de l’exécution d’un programme ?

Déclarer un tableau statique avec une taille fixée au début
Initialiser un tableau avec des valeurs par défaut
Utiliser la fonction free pour augmenter la taille du tableau
Utiliser la fonction realloc pour agrandir ou réduire le tableau existant

Utiliser la fonction realloc pour agrandir ou réduire le tableau existant

Explication

La fonction realloc permet de réajuster la taille d’un espace mémoire déjà alloué, ce qui est l’usage principal de l’allocation dynamique pour faire évoluer la taille d’un tableau en fonction des besoins durant l’exécution.

11. Quand doit-on libérer la mémoire allouée dynamiquement dans un programme ?

Après avoir terminé d’utiliser la mémoire, une fois que l’objet ou la donnée n’est plus nécessaire
Immédiatement après avoir alloué la mémoire, avant de l’utiliser
Avant l’allocation de la mémoire
Au tout début du programme, lors de l’initialisation

Après avoir terminé d’utiliser la mémoire, une fois que l’objet ou la donnée n’est plus nécessaire

Explication

La libération mémoire doit intervenir après que la mémoire n’est plus nécessaire dans le programme, afin d’éviter les fuites. La libération prématurée ou inappropriée, comme avant l’utilisation ou lors de l’initialisation, serait incorrecte. La gestion mémoire consiste à libérer la mémoire une fois l’usage terminé.

12. Que désigne l'allocation en C++ ?

L'attribution de mémoire durant l'exécution du programme par l'opérateur 'new'
L'initialisation d'une variable à une valeur spécifique
La création d'une variable statique au moment de la compilation
La déclaration d'une variable locale dans une fonction

L'attribution de mémoire durant l'exécution du programme par l'opérateur 'new'

Explication

L'allocation en C++ fait référence à la réservation dynamique de mémoire à l'exécution, principalement via l'opérateur 'new', permettant d'obtenir de l'espace mémoire pour des objets ou tableaux dont la taille peut varier à l'exécution. Les autres options décrivent soit des concepts statiques ou locaux, soit une initialisation, qui ne sont pas liés à l'allocation dynamique.

Révisez avec les flashcards

Mémorisez les réponses avec 24 flashcards sur Maîtrise des pointeurs en C/C++.

Pointeur — définition ?

Variable contenant l’adresse d’une autre variable.

Utilité des pointeurs ?

Manipulation efficace, allocation dynamique, passage par adresse.

Syntaxe déclaration pointeur ?

T *idPtr ;

Voir les flashcards →

Approfondir avec la fiche

Consultez la fiche de révision complète sur Maîtrise des pointeurs en C/C++.

Voir la fiche →

Cours similaires

Crée tes propres QCM

Importe ton cours et l'IA génère des QCM avec corrections en 30 secondes.

Générateur de QCM