pointeur sur tableau 'langage C'
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

pointeur sur tableau 'langage C'



  1. #1
    Kosai

    Question pointeur sur tableau 'langage C'


    ------

    bonjour!
    je suis entrain d'apprendre ce langage et j'ai un problème a comprendre comment les pointeur fonction dans les tableau , d’après mes connaissance le pointeur c'est une case mémoire a l'adresse d'une autre case mémoire.
    si on a fait ça :

    char* nom[] = {"alex", "mange"};
    cout << &(*nom)<<endl;
    cout << &(nom)<<endl;

    pourquoi ces deux instruction donne la même résultat ???, ça va afficher l'adresse '0x28FEF4'

    Nom : Capture.PNG
Affichages : 92
Taille : 6,6 Ko

    ça c'est ce que je comprend du code précédent:

    si 'nom' est un tableau qui continent des adresse qui pointes quelque part dans la RAM sur des chaines de caractère pourquoi si j’exécute ça ..

    cout << nom[0];

    ça va m'affiche "alex" et non pas l'adresse qui pointe sur la chaîne et ..

    cout << *nom[0];

    va afficher le premier caractère "a" !!

    ... c'est difficile a comprendre ou quoi !!


    s'il vous plait! quelqu’un peut m'aider a comprendre ca et si vous avez des documentation qui explique le pourquoi du comment de ce langage surtout la notion des pointeurs !

    merci beaucoup!

    -----

  2. #2
    pm42

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Kosai Voir le message
    pourquoi ces deux instruction donne la même résultat ???, ça va afficher l'adresse '0x28FEF4'
    Dans un cas, tu affiches l'adresse du tableau, dans l'autre l'adresse du 1er élément du tableau.
    Vu qu'on met le 1er élément au début du tableau, c'est logique que ce soit la même chose.

    On pourrait imaginer des implémentations où ce n'est pas le cas toutefois, je ne sais pas trop ce que dit la norme.

  3. #3
    Jack
    Modérateur

    Re : pointeur sur tableau 'langage C'

    si 'nom' est un tableau qui continent des adresse qui pointes quelque part dans la RAM sur des chaines de caractère pourquoi si j’exécute ça ..
    cout << nom[0];
    Parce que le compilateur va "regarder" ce que cout va afficher. En l'occurrence, nom est un tableau de chaines, donc nom[0] est une chaine, d'où l'affichage de alex.

    Et comme une chaine est un tableau de caractère, *nom[0] est le 1er caractère de la chaine, d'où le a.

    PS: cout, c'est du C++, pas du C

  4. #4
    Kosai

    Re : pointeur sur tableau 'langage C'

    <nom est un tableau de chaine> !!!!
    nom est un tableau de pointeur veut dire que chaque case de nom contenir une adresse et chaque pointeur va pointer sur une chaîne!
    es-ce que c'est vrai !??

  5. A voir en vidéo sur Futura
  6. #5
    Kosai

    Re : pointeur sur tableau 'langage C'

    mais pourquoi <nom> est un tableau des chaîne!!
    tableau doit contenir des adresse pour qu'il soit pointe sur des espace dans la mémoire ou ce trouve les chaîne!!!
    n'est ce pas !!???

    es que je peux accéder aux ces adresses ? si oui comment??
    merci pour les réponses !!!

  7. #6
    Jack
    Modérateur

    Re : pointeur sur tableau 'langage C'

    La différence entre pointeur et tableau est subtile. Sans que ce soit équivalent, on peut être amené à utiliser l'une ou l'autre pour un résultat similaire.

    mais pourquoi <nom> est un tableau des chaîne!!
    nom est bien un tableau. Et dans ce tableau, tu y as bien placé les chaines alex et mange, non?

  8. #7
    Kosai

    Re : pointeur sur tableau 'langage C'

    oui!!
    c'est vrai !
    donc il y a une différence entre un pointeur normal et un pointeur tableau !!! c'est ça ce que vous êtes entrain de dire!!?
    donc ici il n y a pas une case qui contient une adresse !!?
    et si on dite -- nom[0]-- veut dire vous déplacez entre les chaîne de caractère et si on dit --*nom[0]-- ça veut dire vous pointer sur un élément dans la chaîne de caractère!!!
    merciii beaucoup! jack

  9. #8
    Jack
    Modérateur

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Kosai Voir le message
    donc ici il n y a pas une case qui contient une adresse !!?
    Si. Un tableau de chaines est un tableau de pointeurs, chaque pointeur possédant l'adresse de la zone mémoire où se trouvent les caractères.

  10. #9
    Kosai

    Re : pointeur sur tableau 'langage C'

    OK!!!

    j'ai un autre problème!
    es-que je peut faire ça!!!

    char *friends = {"alex", "koukou"};

    j'ai vu ça dans un cours de l’université stanford!! donc normalement ça a un sens!
    mais le problème c'est que je peux accéder sur le premier élément "alex" mais pas le cas sur les autres !
    je peut voir que c'est pas logique cette ligne mais elle doit être ..

    char* friends[] = ..

    le problème c'est que le compilateur a aucun problème!!!!!
    a ton avis es-que je peux accéder aux autre élément ??

  11. #10
    pm42

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Kosai Voir le message
    es-que je peut faire ça!!!
    char *friends = {"alex", "koukou"};
    Non.

    Citation Envoyé par Kosai Voir le message
    j'ai vu ça dans un cours de l’université stanford!! donc normalement ça a un sens!
    Où exactement ?

    mais le problème c'est que je peux accéder sur le premier élément "alex" mais pas le cas sur les autres !
    je peut voir que c'est pas logique cette ligne mais elle doit être ..

    Citation Envoyé par Kosai Voir le message
    char* friends[] = ..
    Oui.

    Citation Envoyé par Kosai Voir le message
    le problème c'est que le compilateur a aucun problème!!!!!
    Ah bon ? gcc refuse pourtant la ligne sans le [] avec comme message : "excess elements in scalar initializer"

  12. #11
    invite44510b00

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par pm42 Voir le message
    Non.
    Ben si; ça va pointer sur la "chaine" alex(0)koukou(0)(0)"; ça n'a pas grans sens mais syntaxiquement pas de soucis.
    Bien sur, toute fonction chaine appliquée à cette variable va s'arrêter au premier 0 binaire.

    Ah bon ? gcc refuse pourtant la ligne sans le [] avec comme message : "excess elements in scalar initializer"
    Tu es sur que tu ne compiles pas en C++ au lieu de C ?

  13. #12
    pm42

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Fustigator Voir le message
    Tu es sur que tu ne compiles pas en C++ au lieu de C ?
    Non mais tu as raison : je suis allé un peu vite et j'ai eu un warning avec du rouge et j'ai pris ça pour une erreur. My bad.

  14. #13
    Jack
    Modérateur

    Re : pointeur sur tableau 'langage C'

    En effet, gcc et clang génèrent des warnings.
    Mais bizarrement le compilateur microsoft considère ces mêmes messages comme des erreurs. Si le fichier a pour extension C++, on a en plus ":Erreur C2440 'initialisation' : impossible de convertir de 'initializer list' en 'char *'

  15. #14
    pm42

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Jack Voir le message
    En effet, gcc et clang génèrent des warnings.
    Mais bizarrement le compilateur microsoft considère ces mêmes messages comme des erreurs. Si le fichier a pour extension C++, on a en plus ":Erreur C2440 'initialisation' : impossible de convertir de 'initializer list' en 'char *'
    Oui, c'est vraiment le genre de truc à ne pas faire.

  16. #15
    invite44510b00

    Re : pointeur sur tableau 'langage C'

    Citation Envoyé par Jack Voir le message
    Mais bizarrement le compilateur microsoft considère ces mêmes messages comme des erreurs. Si le fichier a pour extension C++, on a en plus ":Erreur C2440 'initialisation' : impossible de convertir de 'initializer list' en 'char *'
    Ca n'a rien de bizarre, c'est même tout à fait normal (et normé); certaines énormités (lire "tolérances") du C ont été fixées lors du normage C++. Dès l'instant où tu compile C++, même avec une syntaxe C standard, tu es en contrôle sémantique C++.

  17. #16
    Jack
    Modérateur

    Re : pointeur sur tableau 'langage C'

    La "bizarrerie" ne portait que sur la réponse différente du compilateur C de Microsoft, pas sur le comportement du compilateur C++ qui est on le sait beaucoup plus strict sur les problèmes de typage.

Discussions similaires

  1. [langage C] Pointeur C
    Par invitea93cc7db dans le forum Programmation et langages, Algorithmique
    Réponses: 2
    Dernier message: 29/06/2015, 12h08
  2. Difference entre structure, pointeur, tableau (langage C).
    Par invitebf26947a dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 12/10/2012, 16h23
  3. Pointeur en langage C
    Par invitebf26947a dans le forum Programmation et langages, Algorithmique
    Réponses: 38
    Dernier message: 26/01/2011, 19h19
  4. Problème Langage C Structure, Pointeur, ...
    Par invite3e43df7f dans le forum Logiciel - Software - Open Source
    Réponses: 17
    Dernier message: 01/04/2006, 21h14
  5. Langage C : pointeur sur une fonction en argument ...
    Par invite1a99f682 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 27/07/2005, 11h29