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 :

tableau et sizeof()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut tableau et sizeof()
    Bonjour,

    Il y a quelque chose que je ne comprend pas au niveau des tableau.

    si on declare :
    vu que tableau est un pointeur c'est comme si on avait:

    ADRESSE===>VALEUR

    tableau ===> @0
    @0 ===> 2
    @1 ===> 6

    mais la fonction sizeof me renvoie deux octets : tableau ===> adresse prend 0 octet?

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    vu que tableau est un pointeur
    Même si le nom du tableau semble ce comporter comme un pointeur,
    ça n'en ai pas un.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    ça n'en ai pas un.
    Dans ce cas là pourquoi printf("%p\n",tableau); affiche une adresse?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Dans ce cas là pourquoi printf("%p\n",tableau); affiche une adresse?
    Car le tableau est situé quelque part en mémoire, et sa valeur correspond à l'adresse du premier élément.

    Un pointeur, c'est une variable (qui a donc un nom, une adresse et une valeur), mais dont sa valeur est une adresse. Et ce pointeur a la caractéristique de pouvoir pointer à cette adresse, grâce à l'opérateur de déréférencement. L'adresse du pointeur n'est pas égale à sa valeur.

    Un tableau est composé d'un certain nombre d'éléments de même type qui se suivent, et l'adresse de ce tableau correspond à l'adresse de son premier élément.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 58
    Par défaut
    ok c'est plus claire.
    merci pour ces eclaircisements

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    jeroman :
    Car le tableau est situé quelque part en mémoire, et sa valeur correspond à l'adresse du premier élément.
    d'accord
    Un pointeur, c'est une variable ....
    d'accord

    Avec cette définition du pointeur, qui me convient parfaitement, l'identificateur d'un tableau ne représente jamais un pointeur : ce n'est une variable (du type tableau) que dans le contexte des opérateurs sizeof et &. Dans les autres cas, c'est simplement une valeur, l'adresse du premier élément du tableau. Si c'était autrement, on pourrait prendre l'adresse de cette "variable".

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il y a deux cas et deux seulement où l'identificateur d'un tableau ne représente pas l'adresse de son premier élément, mais bel et bien le tableau lui-même :
    - Lorsqu'il est l'opérande de l'opérateur sizeof
    - Lorsqu'il est l'opérande de l'opérateur unaire & (adresse de ...)

    Si on a un tableau de N éléments de type T : T tab[N] , sizeof tab renvoie N*sizeof(T)

    Mais si tab est utilisé dans toute autre expression que les deux citées, il est une adresse. Par exemple sizeof (tab+0) renverra la taille d'un pointeur

Discussions similaires

  1. Réponses: 69
    Dernier message: 12/09/2014, 14h47
  2. sizeof() sur un tableau à deux dimensions
    Par Marc22 dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2010, 20h02
  3. Réponses: 2
    Dernier message: 17/09/2009, 14h50
  4. sizeof & tableau de chaine de caratere
    Par la_chevre dans le forum Débuter
    Réponses: 13
    Dernier message: 11/09/2008, 11h18
  5. [Tableau]sizeof et realloc
    Par zsoh dans le forum C
    Réponses: 8
    Dernier message: 02/02/2007, 12h02

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