Loading lang_c_qu_04...

enib_small.png LANG-C Qu_04 — Questionnaire sur le chapitre 04_Pointers

{1} Pointeurs

Vrai ou faux ? Lorsqu'une fonction est appelée, les paramètres formels reçoivent une copie des paramètres effectifs.
 1 ? 


Vrai ou faux ? Lorsqu'une fonction est appelée, les paramètres formels sont des références sur les paramètres effectifs.
 2 ? 


Vrai ou faux ? Lorsqu'une fonction est appelée, la modification d'un paramètre formel n'a aucune influence sur le paramètre effectif correspondant.
 3 ? 


Vrai ou faux ? Lorsqu'une fonction est appelée, la modification d'un paramètre formel modifie également le paramètre effectif correspondant.
 4 ? 


Déclarer une fonction cartesianToPolar() dont le rôle serait de renseigner deux réels angle et magnitude du contexte appelant à partir de deux réels x et y.
 5 ? 


Déclarer une fonction polarToCartesian() dont le rôle serait de renseigner deux réels x et y du contexte appelant à partir de deux réels angle et magnitude.
 6 ? 


Déclarer une fonction swap() dont le rôle serait de permuter deux entiers a et b du contexte appelant.
 7 ? 


Déclarer une fonction translate() dont le rôle serait de translater un vecteur représenté par trois réels x, y et z du contexte appelant selon un vecteur représenté par trois réels dx, dy et dz .
 8 ? 


Vrai ou faux ? La recopie d'un pointeur désigne la même donnée que celle désignée par le pointeur original.
 9 ? 


Vrai ou faux ? La recopie d'un pointeur provoque la copie de la donnée qui est désignée.
 10 ? 


Vrai ou faux ? L'opération de déréférencement consiste à accéder à la donnée qui est désignée par un pointeur.
 11 ? 


Vrai ou faux ? L'opération de déréférencement consiste à obtenir l'adresse d'une donnée.
 12 ? 


Vrai ou faux ? L'opération de référencement consiste à accéder à la donnée qui est désignée par un pointeur.
 13 ? 


Vrai ou faux ? L'opération de référencement consiste à obtenir l'adresse d'une donnée.
 14 ? 


Déclarer un pointeur p désignant l'entier a.
 15 ? 


Déclarer un pointeur p désignant le réel a.
 16 ? 


Déclarer un pointeur sur entier p ne désignant rien.
 17 ? 


Déclarer un pointeur sur réel p ne désignant rien.
 18 ? 


Déclarer un réel c qui vaut la moyenne des valeurs des données désignées par les pointeurs a et b.
 19 ? 


Déclarer un booléen c qui est vrai si les valeurs des données désignées par les pointeurs a et b sont égales.
 20 ? 


Déclarer un pointeur sur réel c qui désigne le plus grand des deux réels a et b.
 21 ? 


Déclarer un pointeur sur entier p qui désigne l'entier a s'il est négatif, et ne désigne rien sinon.
 22 ? 


Vrai ou faux ? Cette fonction peut renvoyer ce résultat.
int *
clamp(int *p,
      int bound)
{
  return *p<=bound ? p : NULL;
}
 23 ? 


Vrai ou faux ? Cette fonction peut renvoyer ce résultat.
int *
clamp(int *p,
      int bound)
{
  return *p<=bound ? p : &bound;
}
 24 ? 


Vrai ou faux ? Cette fonction peut renvoyer ce résultat.
int *
clamp(int *p,
      int *bound)
{
  return *p<=*bound ? p : bound;
}
 25 ? 
{2} Tableaux

Déclarer un tableau values de dix-huit réels ayant une valeur indéterminée.
 26 ? 


Déclarer un tableau values de trois entiers valant 10, 20 et 30.
 27 ? 


Déclarer un tableau values de trois-cents réels dont les trois premiers valent 1.0, 2.0, 3.0 puis tous les autres sont nuls.
 28 ? 


Déclarer un tableau values de cent entiers tous nuls.
 29 ? 


Vrai ou faux ? Si v1 et v2 sont des tableaux d'entiers, nous pouvons réaliser l'affectation v1=v2;.
 30 ? 


Vrai ou faux ? Si v est un tableau d'entiers et p est un pointeur sur entier, nous pouvons réaliser l'affectation p=v;.
 31 ? 


Vrai ou faux ? Si v est un tableau d'entiers et p est un pointeur sur entier, l'affectation p=v; est équivalente à p=&v[0];.
 32 ? 


Vrai ou faux ? Si v est un tableau d'entiers et p est un pointeur sur entier, nous pouvons réaliser l'affectation v=p;.
 33 ? 


Que vaut la variable sz après cette portion de code ?
printf("%d\n", (int)sizeof(int));   // 4 on this platform
printf("%d\n", (int)sizeof(int *)); // 8 on this platform
int values[7];
int sz=(int)sizeof(values);
 34 ? 


Que vaut la variable sz après cette portion de code ?
printf("%d\n", (int)sizeof(int));   // 4 on this platform
printf("%d\n", (int)sizeof(int *)); // 8 on this platform
int values[7];
int sz=(int)sizeof(values[0]);
 35 ? 


Que vaut la variable sz après cette portion de code ?
printf("%d\n", (int)sizeof(int));   // 4 on this platform
printf("%d\n", (int)sizeof(int *)); // 8 on this platform
int values[7];
int sz=(int)(sizeof(values)/sizeof(values[0]));
 36 ? 


Que vaut la variable sz après cette portion de code ?
printf("%d\n", (int)sizeof(int));   // 4 on this platform
printf("%d\n", (int)sizeof(int *)); // 8 on this platform
int values[7];
int *p=values;
int sz=(int)sizeof(p);
 37 ? 


Que vaut la variable sz après cette portion de code ?
printf("%d\n", (int)sizeof(int));   // 4 on this platform
printf("%d\n", (int)sizeof(int *)); // 8 on this platform
int values[7];
int *p=values;
int sz=(int)sizeof(p[0]);
 38 ? 


Vrai ou faux ? Si v1 et v2 sont des tableaux d'entiers, la comparaison
if(v1==v2)
{
  /* ... */
}
teste l'égalité des entiers de chaque tableau.
 39 ? 


Vrai ou faux ? Si v1 et v2 sont des tableaux d'entiers, la comparaison
if(v1==v2)
{
  /* ... */
}
teste l'égalité des adresses de ces tableaux.
 40 ? 


Vrai ou faux ? Si v est un tableaux d'entiers et p un pointeur sur entier, la comparaison
if(p==v)
{
  /* ... */
}
teste si p désigne le tableau v.
 41 ? 


Vrai ou faux ? Si v est un tableaux d'entiers et p un pointeur sur entier, la comparaison
if(p==v)
{
  /* ... */
}
teste l'égalité des entiers désignés par p et ceux du tableau v.
 42 ? 


Si v est un tableau de réels, déclarer un pointeur p qui désigne v[3] en utilisant la notation de l'arithmétique des pointeurs.
 43 ? 


Si p est un pointeur et i un entier, quelle expression utilisant la notation de l'arithmétique des pointeurs est équivalente à &p[i] ?
 44 ? 


Si p est un pointeur et i un entier, quelle expression utilisant la notation de l'arithmétique des pointeurs est équivalente à p[i]?
 45 ? 


Si v est un tableau de réels, p1 un pointeur désignant v[4] et p2 un pointeur désignant v[7], que vaut l'expression p2-p1 ?
 46 ? 


Si v est un tableau de réels, p1 un pointeur désignant v[8] et p2 un pointeur désignant v[2], que vaut l'expression p2-p1 ?
 47 ? 


Reformuler la boucle suivante en utilisant la notation de l'arithmétique des pointeurs.
for(int i=0; i<count; ++i)
{
  printf("%d ", v[i]);
}
 48 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int *p;
if(!p)
{
  printf("nothing\n");
}
 49 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int *p;
if(p)
{
  printf("something\n");
}
 50 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int *p;
if(!p)
{
  printf("nothing\n");
}
 51 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int *p;
if(p)
{
  printf("something\n");
}
 52 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int *p=NULL;
if(!p)
{
  printf("nothing\n");
}
 53 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int *p=NULL;
if(p)
{
  printf("something\n");
}
 54 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int *p=NULL;
if(!p)
{
  printf("nothing\n");
}
 55 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int *p=NULL;
if(p)
{
  printf("something\n");
}
 56 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int v=0;
int *p=&v;
if(!p)
{
  printf("nothing\n");
}
 57 ? 


Vrai ou faux ? Le message de cette alternative s'affiche toujours.
int v=0;
int *p=&v;
if(p)
{
  printf("something\n");
}
 58 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int v=0;
int *p=&v;
if(!p)
{
  printf("nothing\n");
}
 59 ? 


Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
int v=0;
int *p=&v;
if(p)
{
  printf("something\n");
}
 60 ? 


Déclarer une fonction sum() dont le rôle serait de renvoyer la somme des count réels du tableau désigné par un pointeur p sans les modifier.
 61 ? 


Déclarer une fonction invert() dont le rôle serait de remplacer par leur inverse chacun des count réels du tableau désigné par un pointeur p.
 62 ? 


Quelle incohérence a été introduite dans cette fonction ?
void
twice(const double *p,
      int count)
{
  for(int i=0; i<count; ++i)
  {
    p[i]*=2.0;
  }
}
 63 ? 


Quelle incohérence a été introduite dans cette fonction ?
double *
last(const double *p,
     int count)
{
  return p+count-1;
}
 64 ?