Citation :
Par exemple, sizeof() est différent de strlen() pour plusieurs raisons dont une qui est que sizeof renvoie une taille qui est calculée lors de la compilation et non pas lors de l'exécution du programme.
|
sizeof renvoi la taille du type d'un identifeur ou d'un type, c'est opérateur du langage et c'est résolu statiquement ('sizeof x' est une expression constante). Une chaine litterale est de type tableau de char (comme un identifieur de type tableau c'est l'adresse de sont premier element), donc aucune confusion car sizeof renvoi bien la taille du tableau
Citation :
Autre exemple, en fonction du contexte, sizeof() peut renvoyer soit la taille d'une chaine de caractères, soit la taille du pointeur sur une chaine de caractères, voir le code ci-dessous, ou sizeof() renvoie 4 ou 100.
|
tu vois tu n'as pas vraiment compris ce que retourne sizeof, la encore pas de confusion, dans le main s est de type tableau de 100 char donc sizeof renvoi 100, dans la fonction s est de type pointeur de char qui au moment de l'appel pourra se voir affecter l'adresse d'un tableau de char (en c++ on ne peut pas passer de tableau par valeur) donc sizeof retourne la taille du pointeur
par contre si tu avais passer le tableau par référence sizeof aurait retourné 100...
d'ailleur tu ecris
Code :
- void print_sizeof_in_sub(char s[100])
|
et c'est peut etre pour ca que c'est confus pour toi, en réalité ce prototype est strictement équivalent à
Code :
- void print_sizeof_in_sub(char s[])
|
et à
Code :
- void print_sizeof_in_sub(char *s)
|