Voici une série de questions à choix multiples QCM sur les pointeurs en langage C. Chaque question est accompagnée de sa réponse et d’une explication détaillée pour clarifier les concepts.
Que contiendra un pointeur non initialisé lorsqu’il est déclaré ?
Un pointeur non initialisé contient une valeur indéfinie (garbage value), qui correspond à une adresse mémoire aléatoire. Il peut provoquer un comportement indéfini si utilisé.
Que retourne sizeof(arr)
si arr
est un tableau déclaré comme suit : int arr[10];
?
int
).Pour un tableau statique, sizeof(arr)
retourne la taille totale du tableau en octets, soit 10 * sizeof(int)
.
Que se passe-t-il lorsqu’un tableau est passé à une fonction ?
Lorsqu’un tableau est passé à une fonction, il est converti (décay) en pointeur pointant vers le premier élément du tableau.
Quel est le résultat du code suivant ?
int *p = NULL;
printf("%d", *p);
0
est imprimé.NULL
.Déréférencer un pointeur NULL
provoque un comportement indéfini, souvent un segmentation fault.
Quelle est la syntaxe correcte pour déclarer un pointeur vers une fonction retournant un entier et prenant deux entiers comme arguments ?
int *func_ptr(int, int);
int *(*func_ptr)(int, int);
int (*func_ptr)(int, int);
✅int func_ptr(int, int);
int (*func_ptr)(int, int);
est la syntaxe correcte pour déclarer un pointeur vers une fonction prenant deux int
comme arguments et retournant un int
.
Que se passe-t-il si free()
est appelé deux fois sur le même pointeur ?
Appeler free()
deux fois sur le même pointeur provoque un comportement indéfini. Cela peut entraîner des crashs ou une corruption de la mémoire.
Que représente **pp
si int **pp = &p;
et p
est un pointeur vers un entier ?
p
.p
. ✅**pp
donne la valeur pointée par le pointeur p
, car pp
est un pointeur vers un pointeur.
Que retourne le code suivant ?
char str[] = "Hello";
char *p = str;
printf("%c", *(p + 2));
H
l
✅e
*(p + 2)
donne le troisième caractère de la chaîne, soit l
.
Que fait l’opérateur ->
?
L’opérateur ->
est utilisé pour accéder aux membres d’une structure via un pointeur.
Que signifie int *const p = &x;
?
p
est un pointeur constant, mais la valeur pointée peut être modifiée. ✅p
est constante.int *const p = &x;
signifie que p
est un pointeur constant (son adresse ne peut pas changer), mais la valeur qu’il pointe peut être modifiée.
malloc
Quel problème potentiel ce code pose-t-il ?
char *str = (char *)malloc(5);
strcpy(str, "Hello");
malloc
.malloc(5)
alloue uniquement 5 octets, mais "Hello"
nécessite 6 octets (5 caractères + le caractère nul \0
).
Que fait ce code ?
int **matrix = (int **)malloc(3 * sizeof(int *));
for (int i = 0; i < 3; i++) {
matrix[i] = (int *)malloc(3 * sizeof(int));
}
Ce code alloue dynamiquement une matrice 3×3 (tableau 2D dynamique).
Voici une nouvelle série de questions à choix multiples (QCM) avec des explications détaillées pour approfondir vos connaissances sur les pointeurs en C. Ces questions se concentrent sur des concepts encore plus complexes et des cas pratiques.
Que retourne le code suivant ?
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
printf("%lu\n", sizeof(p));
return 0;
}
arr
.sizeof(int)
).sizeof(p)
retourne la taille d’un pointeur (4 octets sur une architecture 32 bits, 8 octets sur une architecture 64 bits). Les tableaux, lorsqu’ils sont assignés à un pointeur, ne gardent aucune information sur leur taille.
Que donne le code suivant ?
#include <stdio.h>
int main() {
int arr[] = {10, 20, 30};
int *p = arr + 1;
printf("%d\n", *(p - 1));
return 0;
}
p
pointe initialement sur arr[1]
(valeur 20). Le décalage (p - 1)
revient à pointer sur arr[0]
, donc *(p - 1)
retourne 10.
Que signifie const int *p
?
p
est constant.p
est constante. ✅const int *p
signifie que la valeur pointée par p
ne peut pas être modifiée, mais le pointeur p
lui-même peut changer d’adresse.
Quel est le rôle d’un pointeur void
?
Un pointeur void
est générique et peut pointer vers n’importe quel type, mais il ne peut pas être déréférencé sans conversion explicite.
Que donne le code suivant ?
#include <stdio.h>
void modify(int *arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] += 1;
}
}
int main() {
int arr[] = {1, 2, 3};
modify(arr, 3);
printf("%d\n", arr[0]);
return 0;
}
Lorsque le tableau arr
est passé à la fonction modify
, il est converti en pointeur. Les modifications dans la fonction affectent directement le tableau original.
Que représente **p
dans le code suivant ?
int a = 10;
int *p1 = &a;
int **p = &p1;
p1
.a
.a
. ✅*p
pointe sur p1
, et **p
donne la valeur pointée par p1
, soit a
.
Que se passe-t-il si vous déréférencez un pointeur libéré par free
?
Déréférencer un pointeur libéré (free
) mène à un comportement indéfini. Cela peut provoquer des erreurs aléatoires ou des crashs.
Que donne le code suivant ?
#include <stdio.h>
#include <stdlib.h>
int main() {
int **matrix = (int **)malloc(2 * sizeof(int *));
for (int i = 0; i < 2; i++) {
matrix[i] = (int *)malloc(2 * sizeof(int));
}
matrix[0][0] = 5;
matrix[1][1] = 10;
printf("%d %d\n", matrix[0][0], matrix[1][1]);
for (int i = 0; i < 2; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}
Le tableau 2D est alloué dynamiquement et les valeurs assignées sont affichées correctement.
malloc
Quel est le problème potentiel dans ce code ?
char *str = (char *)malloc(5);
strcpy(str, "Hello");
malloc
n’alloue pas de mémoire.malloc(5)
alloue uniquement 5 octets, mais "Hello"
nécessite 6 octets (5 caractères + le caractère nul \0
). Cela provoque un dépassement mémoire.
Quelle est la sortie du code suivant ?
#include <stdio.h>
void func(int *p) {
*p = *p + 10;
}
int main() {
int a = 5;
func(&a);
printf("%d\n", a);
return 0;
}
La fonction func
modifie directement la valeur de a
via un pointeur.
Que donne le code suivant ?
#include <stdio.h>
int main() {
char *str = "Hello";
printf("%c\n", *(str + 1));
return 0;
}
H
e
✅l
*(str + 1)
donne le deuxième caractère de la chaîne "Hello"
, soit e
.
Ces questions vous aideront à explorer les concepts avancés des pointeurs tout en renforçant vos compétences en C.
Télécharger un canevas Word Présentation d’Entreprise ⬇︎ 1. Définition : Qu’est-ce qu’une Présentation d’Entreprise ?…
Le dossier professionnel est un document essentiel pour structurer et valoriser un parcours professionnel. Il…
Une présentation de dossier est un document structuré qui permet d’exposer de manière claire et…
Maîtriser la Syntaxe en Français La syntaxe est l'un des piliers fondamentaux de la langue…
Dans le marché compétitif d'aujourd'hui, une proposition de valeur pertinente est primordiale pour distinguer une…
Lors de l’élaboration ou de la révision d’un texte législatif, réglementaire ou statutaire, les propositions…
This website uses cookies.