Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

pointeur sur char


Sujet :

C++

  1. #1
    Futur Membre du Club
    pointeur sur char
    Bonjour,
    Comme vous vous en rendez compte, je suis débutant en c++
    Je me pose la question suivante : pourquoi n'est-il pas possible d'écrire:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    char a = 'z';
    int *pointeur = &a;


    ?
    Merci pour vos réponses

  2. #2
    Expert confirmé
    Bonjour,

    a est un char, donc pour pouvoir pointer sur a il faut un pointeur sur char.
    Un pointeur sur un int, ça va permettre d'accéder quelque qui est un int.

  3. #3
    Futur Membre du Club
    merci bien. Mais je pensais que le contenu d'un pointeur étant une adresse, donc un nombre, c'était toujours du int ou du long.

  4. #4
    Expert éminent
    Citation Envoyé par RVOLIA Voir le message
    Mais je pensais que le contenu d'un pointeur étant une adresse, donc un nombre, c'était toujours du int ou du long.
    C'est le cas 1 adresse est 1 nombre. Mais

    • On dit vers quoi on pointe : char*, my_struct*, FILE*
    • depuis la norme C99, et l'arrivée des processeurs 64 bits, il y a les types intptr_t et uintptr_t pour contenir 1 pointeur. Parce que si tu utilises l'opérateur sizeof sur 1 pointeur, il te retournera soit 4 octets (pour du 32 bits) soit 8 octets (pour du 64 bits). C'est lié qu'1 processeur de X bits peut allouer 2^X de mémoire (la fameuse limite de 4 Go des systèmes d'exploitation 32 bits )


    Ensuite, cela c'est juste le début :
    • parce 1 adresse c'est aussi le début de quelque chose - d'1 tableau, de ta structure
    • tu as justement l’arithmétique des pointeurs
    • les dangling pointeurs
    • 1 tableau passé en paramètre est dégradé en pointeur (et donc tu perds la taille)
    • ...
    • la généricité avec void*

  5. #5
    Futur Membre du Club
    ok, merci pour ces réponses mais alors comment j'obtiens l'adresse de char a avec un char *pointeur?

  6. #6
    Expert éminent
    Simplement avec 1 affectation
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        char a = 'z';
     
        char* p_a = &a;
        char* p_b = p_a;
        char* p_c = NULL;
     
        printf("%c at adresse %p - %lu bits (p_a: %p, p_b: %p, p_c: %p)\n", a, &a, sizeof(p_a), p_a, p_b, p_c);

  7. #7
    Futur Membre du Club
    ok, merci pour vos réponses