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.