1.
(*3) La fonction strcpy permet de copier une chaine de caractères dans une autre, existante.
Voici son prototype :
char *strcpy ( char *destination, char *source) ;.
Écrivez cette fonction sans utiliser de tableaux ni d’opérateurs [] (uniquement des pointeurs et des accès pointeurs).
Réponse :
char *strcpy ( char *destination, char *source) { while ( source != ’’) { destination = source ; destination++ ; source++ ; } destination = ’’ ; }
2.
Soit la déclaration suivante : char mant[] = { ’a’, ’b’ }.
Que vaut mant[2] ?
Réponse : Son contenu est indéterminé.
Le tableau mant est implicitement déclaré de taille le nombre d’éléments présent dans son initialisation, donc ici 2. Il n’y a donc pas d’élément mant[2].
mant n’est pas une chaîne de caractères, car il n’a pas été initialisé avec une chaîne
(« ab »).
3.
Dans le code suivant :
int i=0, j=0 ; j = ++i ;
Que vaut la variable j après l’instruction d’affectation ?
Réponse : j vaudra 1.
L’expresssion ++i se lit de gauche à droite : d’abord l’incrémentation de i, puis retour de sa valeur, pour être stockée dans j. Ainsi, j vaudra 1.
4.
Que vaut la variable ille dans le code suivant ?
float ille ; ille = 2/3*100.0 ;
5
Pourquoi ?
Réponse : ille vaut 0.0.
L’expression 2/3 est évaluée dans le type int, donc vaut 0.
Note. En cas d’opérateurs de même priorité, la norme du langage C ne précise pas l’ordre d’évaluation de l’expression. Pour éviter tout problème, il faut bien indiquer les types des constantes et placer des parenthèses pour éviter l’ambiguité : 2.0/(3.0*100.0) ou (2.0/3.0)*100.0.