Exercice langage C corrigé les programmes différents

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.

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *