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)