Que font ces lignes de code ?
#include <stdio.h>
int main() {
int x = 5;
&x = 18;
*x = 10;
int *y = 0;
&y = 18;
*y = 10;
return 0;
}
- A. Le code contient des erreurs de compilation dues à l'assignation incorrecte d'adresses et à la déréférence de variables non pointeurs.
- B. Le code provoquera une erreur de segmentation à l'exécution en raison de la déréférence d'un pointeur NULL.
- C. Le code ne compile pas car il tente d'assigner des valeurs entières à des adresses mémoire.
- D. Le code ne fait rien car les erreurs de compilation empêchent son exécution.
Fait une schéma mémoire.
Expliqué les différentes lignes.
Que font ces lignes de code ?
int a = 0xffffffff;
void *ptr = (void*)&a;
*(char*)ptr = 8;
- A) Elles changent la valeur de a (int) à 8 (donc 4 octets modifiés)
- B) Elles changent le premier octet de a : 0x08ffffff
- C) Elles changent le dernier octet de a : 0xffffff08
- D) Elles provoquent une erreur de compilation
- E) Autre chose ?
Quelle sera la sortie du programme suivant ?
#include <stdio.h>
int main() {
int x = 5;
int *ptr = &x;
*ptr = 10;
printf("%d\n", x);
return 0;
}
- A) 5
- B) 10
- C) Erreur de segmentation
- D) Ça ne compile pas
Que fait le code suivant ?
#include <stdio.h>
void A(int val) {
val = 42;
}
int B(int val) {
return val+12;
}
void C(int *ptr) {
*ptr = 20;
}
int main() {
int a = 15;
A(a);
printf("%d\n", a);
B(&a);
printf("%d\n", a);
C(a);
printf("%d\n", a);
return 0;
}
- A) Il affiche 42, 54, 20
- B) Il affiche 15, 27, 20
- C) Il affiche 15, 27, 27
- D) Il provoque une erreur de compilation
- E) Autre ?
Quelle sera la sortie du programme suivant ?
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr + 2;
printf("%d\n", *ptr);
return 0;
}
- A) 1
- B) 2
- C) 3
- D) 4
Que fait le code suivant ?
#include <stdio.h>
int main() {
char str[] = "Hello";
char *ptr = str;
while (*ptr != '\0') {
*ptr = *ptr + 1;
ptr++;
}
printf("%s\n", str);
return 0;
}
- A) Il affiche "Hello"
- B) Il affiche "Ifmmp"
- C) Il provoque une erreur de segmentation
- D) Il ne compile pas