Déclarer un tableau 
values de dix-huit réels ayant une valeur
    indéterminée.
Déclarer un tableau 
values de trois entiers valant
    
10, 
20 et 
30.
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.
Déclarer un tableau 
values de cent entiers tous nuls.
Vrai ou faux ? Si 
v1 et 
v2 sont des tableaux d'entiers,
    nous pouvons réaliser l'affectation 
v1=v2;.
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;.
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];.
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;.
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);
 
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]);
 
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]));
 
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);
 
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]);
 
Vrai ou faux ? Si 
v1 et 
v2 sont des tableaux d'entiers, la comparaison
  
  teste l'égalité des entiers de chaque tableau.
Vrai ou faux ? Si 
v1 et 
v2 sont des tableaux d'entiers, la comparaison
  
  teste l'égalité des adresses de ces tableaux.
Vrai
  N.B. : il est toutefois extrêmement improbable que deux variables
    aient effectivement la même adresse, ceci n'est pas abordé dans ce
    cours.
  (voir 
cette section)
  
Vrai ou faux ? Si 
v est un tableaux d'entiers et 
p un pointeur sur entier,
    la comparaison
  
  teste si 
p désigne le tableau 
v.
Vrai ou faux ? Si 
v est un tableaux d'entiers et 
p un pointeur sur entier,
    la comparaison
  
  teste l'égalité des entiers désignés par 
p et ceux du tableau 
v.
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.
Si 
p est un pointeur et 
i un entier, quelle expression
    utilisant la notation de 
l'arithmétique des pointeurs
    est équivalente à 
&p[i] ?
Si 
p est un pointeur et 
i un entier, quelle expression
    utilisant la notation de 
l'arithmétique des pointeurs
    est équivalente à 
p[i]?
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 ?
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 ?
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]);
}
 
int *end=v+count;
for(int *p=v; p<end; ++p)
{
  printf("%d ", *p);
}
  (voir 
cette section)
  
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int *p;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int *p;
if(p)
{
  printf("something\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int *p;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int *p;
if(p)
{
  printf("something\n");
}
 
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int *p=NULL;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int *p=NULL;
if(p)
{
  printf("something\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int *p=NULL;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int *p=NULL;
if(p)
{
  printf("something\n");
}
 
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int v=0;
int *p=&v;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative s'affiche toujours.
  
int v=0;
int *p=&v;
if(p)
{
  printf("something\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int v=0;
int *p=&v;
if(!p)
{
  printf("nothing\n");
}
 
Vrai ou faux ? Le message de cette alternative ne s'affiche jamais.
  
int v=0;
int *p=&v;
if(p)
{
  printf("something\n");
}
 
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.
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.
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;
  }
}
 
Le pointeur 
p est qualifié de 
const mais est utilisé pour
    modifier les données désignées.
  (voir 
cette section)
 
Quelle incohérence a été introduite dans cette fonction ?
  
double *
last(const double *p,
     int count)
{
  return p+count-1;
}
 
Le pointeur renvoyé n'est pas qualifié de 
const alors qu'il est issu
    du pointeur 
p qui l'est.
  (voir 
cette section)