1.
(*2) Soit le code suivant :
void g(int *p) { *p = 12 ; } int main() { int *p ; g(p) ; printf("%d\n", *p) ; }
Qu’est ce qui s’af?che ?
Réponse : L’af?chage est indéterminé ou erreur d’exécution.
Le pointeur p dé?ni dans la fonction main n’est pas initialisé. Comme il s’agit d’une variable locale, son contenu est indéterminé.
L’expression g(p), puis, dans la fonction g, pp = 12, sont donc erronées. Avec de la chance, il y aura une erreur à l’exécution (segmentation error), ou pire, un écrasement mémoire.
2
Que vaut la variable j à la ?n de la fonction f ?
void f(int i) { int j ; j = i ; }
Réponse : Son contenu est indéterminé.
j est un pointeur, qui n’est pas initialisé. Comme il s’agit d’une variable locale, son contenu est indéterminé.
L’expression j est donc erronée. Avec de la chance, il y aura une erreur à l’exécution (segmentation error), ou pire, un écrasement mémoire.
3.
(*2) Que vaut la variable fleuri dans le code suivant :
char fleuri = 100 ;
fleuri *= 2 ;
Pourquoi ?
Réponse : fleuri vaut -56.
Le type char est signé. Sa plage de valeurs est de -128 à 127 (de 2 n1 à 2 n1 1), où n est le nombre de bits du type, ici 8. Concernant les nombres signés, pour un nombre ositif donné, nous avons la formule suivante : a 2 n = (a). Ici, pour fleuri égal à 200, le nombre négatif correspondant est donc -56.