IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Sizeof d'un pointeur sur char ...


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut Sizeof d'un pointeur sur char ...
    Salut !

    J'ai une petite question qui me turlupine...


    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char s[] = "azerty", * s1 = "bonjour a tous";
    char * t, * t1;
    t = s;
    t1 = s1
    Comment se fait-il que si je demande un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizeof(t);
    sizeof(t1);
    Il me renvoie 4 (pour t et pour t1) ???

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut Re: Sizeof d'un pointeur sur char ...
    Citation Envoyé par Mike888
    Salut !

    J'ai une petite question qui me turlupine...


    Si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char s[] = "azerty", * s1 = "bonjour a tous";
    char * t, * t1;
    t = s;
    t1 = s1
    Comment se fait-il que si je demande un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizeof(t);
    sizeof(t1);
    Il me renvoie 4 ???
    t et t1 etant tout deux du type char*, sizeof(t) et sizeof(t1) sont strictement egaux a sizeof(char*) qui vaut 4 dans ton configuration, il n'y a rien d'etrange la dedans. Qu'aurais tu voulu obtenir ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut
    Ben, si je demande le sizeof de s ou de s1, il me renvoie la longueur de la chaine (comme l'aurait fait strlen). Pourquoi dans ce cas me renvoie-t-il systématiquement 4 pour les pointeurs ? Dois-je m'en inquiéter ?

  4. #4
    Yux
    Yux est déconnecté
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 105
    Points : 74
    Points
    74
    Par défaut
    Un pointeur est une adresse mémoire, ie 32 bits soient 4 octets, quelque soit le type pointé. Pas de raison de t'inquiéter donc, sauf si tu travailles sur une architecturer x86_64 .

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 463
    Points : 114
    Points
    114
    Par défaut
    Ok alors... je suis rassuré

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Sizeof d'un pointeur sur char ...
    Citation Envoyé par Mike888
    Si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char s[] = "azerty", * s1 = "bonjour a tous";
    char * t, * t1;
    t = s;
    t1 = s1
    Comment se fait-il que si je demande un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sizeof(t);
    sizeof(t1);
    Il me renvoie 4 (pour t et pour t1) ???
    Normal. sizeof retourne la taille de l'objet, pas celle de l'objet pointé. Ici, ton pointeur a une taille de 4 bytes, ce qui est courant sur les architectures 32-bit.

  7. #7
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Yux
    Un pointeur est une adresse mémoire,
    Non. un pointeur est une variable.

    http://emmanuel-delahaye.developpez.....htm#pointeurs

  8. #8
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,
    Citation Envoyé par Mike888
    Ben, si je demande le sizeof de s ou de s1, il me renvoie la longueur de la chaine (comme l'aurait fait strlen).
    Pur coincidence (1), en fait sizeof renvoi la taille de l'élément, donc ici la taille de la zone mémoire s. Essai de faire la même chose avec un tableau d'entier, tu n'obtient pas le nombre d'élément du tableau.
    Pour obtenir le nombre d'élément, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #defien nb_elt(t) (sizeof (t)/sizeof (*t))
    sizeof() et les tableaux

    ---
    (1) plus exactement, tu obtiens le résultat strlen + 1 puisque strlen ne tient pas compte du caractère de fin de chaîne.

  9. #9
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par gege2061
    Pour obtenir le nombre d'élément, il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #defien nb_elt(t) (sizeof (t)/sizeof (*t))
    Attention, erreur classique... C'est le paramètre de la macro qui doit être entre parenthèses...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define nb_elt(t) (sizeof (t)/sizeof *(t))

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/01/2010, 16h24
  2. Réponses: 1
    Dernier message: 22/12/2009, 11h40
  3. Allocation dynamique: Tableau de pointeur sur char
    Par Anonymouse dans le forum Débuter
    Réponses: 4
    Dernier message: 21/10/2007, 10h57
  4. Réponses: 6
    Dernier message: 02/11/2006, 16h44
  5. [Console] Pointeur sur char
    Par archipel_k dans le forum C
    Réponses: 4
    Dernier message: 04/08/2006, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo