Bases de la programmation en C

char s[] = "abc", t[] = "xyz";
const char *p = s;
char *const q = s;

Après les déclarations ci-dessus, on écrit l'une des instructions A « p = t; », B « *p = 'x'; », C « q = t; » ou D « *q = 'x'; ». Quelle combinaison indique celles qui provoquent une erreur de compilation ?

  1. AA et D
  2. BB et C
  3. CB et D
Afficher la réponse et l'explication

Réponse : B. B et C

const char *p est un « pointeur sur un char const » : on ne peut pas modifier par p le caractère pointé, mais on peut faire pointer p lui-même vers une autre adresse. char *const q est un « pointeur const » : on ne peut pas modifier q, mais on peut modifier ce que q pointe. B (affectation à *p) et C (affectation à q) provoquent donc une erreur. Règle de lecture : const à gauche de * fige ce qui est pointé, const à droite de * fige le pointeur lui-même.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation en C

  1. Quelle est la sortie obtenue en exécutant le programme ci-dessus, qui utilise un tableau de pointeurs de fonction ?
  2. fill et use sont des fonctions définies ailleurs. Quel est le problème de la fonction ci-dessus ?
  3. Quelle affirmation sur le pointeur renvoyé par la fonction make ci-dessus est correcte ?
  4. En C, quelle est la raison la plus appropriée pour laquelle il est recommandé d'écrire p = NULL; juste après free(p); ?
  5. La chaîne de 8 caractères "ABCDEFGH" est passée à la fonction save ci-dessus. Que se passe-t-il ?