Faites aussi des essais avec les chaînes de caractères.
(T)y
convertit y
en une valeur
de type T
. Cela s'appelle un cast.
Expérimentez avec le cast de pointeurs.
L'addition d'un entier et d'un pointeur est un pointeur de même type.
L'entier est converti en le type size_t
avant l'addition.
La soustraction de deux pointeurs est un entier de type ptrdiff_t
habituellement défini dans stddef.h
.
=
, par exemple un nom de variable.
&p
sur une lvalue de type T
est un pointeur de type T*
.
*p
sur un pointeur de type T*
est une lvalue de type T
.
p[i]
est équivalent à *(p+i)
.
&p[i]
se lit &(p[i])
est équivalent à (&p)[i]
.
T
à n
éléments alloue un bloc de taille n*sizeof(T)
.
Quand on utilises un tableau t
autrement que sous la
forme &t
, c'est équivalent à &t[0]
.
T x[n][...]
déclare x
comme tableau
à n
éléments de type T [...]
.
Ainsi, x[i][j]
est équivalent à
x[i*sizeof(x[0])+j]
.
T x[]
est presque identique à T *x
.
Néanmoins, la seconde syntaxe déclare un pointeur, tandis que la première déclare un tableau de taille non spécifiée.
Donnez un exemple où cela cause une différence.