• [^] # Re: Petites precisions

    Posté par . En réponse au journal J'adore Linus. Évalué à 0.

    > Non, on peut pas.

    Non, on peut pas :-)
    J'ai mélangé les pinceaux.

    > C'est deux instructions sont complètement équivalentes et ont exactement la même sémantique (pour peu que p soit un pointeur, hein).

    Oui c'est complètement équivalent et a la même sémantique.
    Si on se "limite" à ça, c'est complètement inutile utiliser NULL au lieu de 0 (3 caractères de plus sans aucune valeur ajoutée).
    Je parle de signification.

    Puisque 0 est équivalent à null pointer (car le compilo fait une "bidouille") que ce passe-t'il dans ces cas :
    static int i ; // équivalent à static int i = 0
    static char* p ;
    static char *p[10] ; // tableau de pointeur à 0 (bit à 0) ou null pointeur ?
    static union {
    long i[10] ;
    void * p[10] ;
    } titi ;

    Tous les pointeurs sont initialisés à 0 (bits à 0) ou à null pointeur (qui n'est pas forcément 0) ?

    char * p1 = "toto" ;
    char * p2 = p1 ;
    void * p = (void *)(p1 - p2) ;
    C'est équivalent à "(void *)0" . Mais 0 ou null pointer pour p ?
    Normalement c'est 0 et pas null pointer. La soustraction de deux trucs valide ne donne jamais NULL. Ici la réponde est 0 et pas null pointeur mais si c'est la même chose qui est stocké sur certaine implémentation.

    Dans 99,9 % des cas, on peut remplacer NULL par 0, mais ça n'a pas la même signification.