25Fermer27
Kevin KoflerLe 17/08/2007 à 00:25
Ximoon (./2) :
Un tableau d'octet est (presque) un pointeur sur char, donc ton &message est un superpointeur (tripo) sur char (un char** quoi).

Non, ce n'est pas un char **. C'est encore un animal différent, un char (*)[256]. Alors qu'assigner un char ** à un char * est une erreur fatale (ça va passer avec un warning aussi, mais boguer grave en temps d'exécution), ici le warning est le seul problème, parce qu'un char (*)[256] n'est pas si différent que ça d'un char *. (Ceci dit, le warning est raison suffisante pour corriger le problème.)

L'adresse contenue dans un char ** est l'adresse d'un pointeur (de type char *). L'adresse contenue dans un char (*)[256] est l'adresse du premier char du tableau de 256 chars.

Cette différence est importante quand on veut faire un tableau à plusieurs dimensions: un char ** revient à la représentation style Java (tableau de pointeurs), un char (*)[n] à une représentation contiguë en mémoire (donc plus efficace, une seule allocation à faire).

Le pointeur obtenu par le decay (conversion automatique tableau->pointeur sous certains contextes, c'est ça qui permet d'utiliser le char [256] directement comme un char * sans aucune conversion) d'un char *(x[m]) est un char **px. Le pointeur obtenu par le decay d'un char y[m][n] est un char (*py)[n].