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 :

différence entre char (*address)[2] et char* address[2]?


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut différence entre char (*address)[2] et char* address[2]?
    Comme le sujet l'indique, existe-t-il une différence entre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char (*address)[2]
    //et
    char* address[2]
    ? si oui laquelle?

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Oui il sont différent, le premier est un pointeur sun un tableau de 2 charactères (ou si tu préfère, *address est un tableau de 2 charactères), et le second est un tableau de 2 pointeur sur des charactères (ou si tu préfère un tableau de deux char*).

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Okay et si je veux un tableau de pointeurs sur des chars de taille LENGTH, je fais quoi?
    (c'est à dire sur des chaines de caractères dont je connais la longueur)...

  4. #4
    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
    Citation Envoyé par ncheboi Voir le message
    Okay et si je veux un tableau de pointeurs sur des chars de taille LENGTH, je fais quoi?
    (c'est à dire sur des chaines de caractères dont je connais la longueur)...
    Veux-tu vraiment un tableau de pointeurs sur des tableaux de LENGTH char ?
    Un tableau bidimensionnel ne conviendrait-il pas ?

    As tu une raison particulière de ne pas utiliser des vector et des string ?

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Citation Envoyé par gl Voir le message
    Veux-tu vraiment un tableau de pointeurs sur des tableaux de LENGTH char ?
    Un tableau bidimensionnel ne conviendrait-il pas ?

    As tu une raison particulière de ne pas utiliser des vector et des string ?
    J'ai pas le choix du format ... Je dois stocker dans un tableau des char* de longueurs connues...
    On me donne ça comme exemple mais j'ai un peu du mal à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #define ADDRESS_LEN 32
    //...
    char (*addresses)[ADDRESS_LEN];
    addresses = (char (*)[ADDRESS_LEN])malloc(sizeof(char)*ADDRESS_LEN*maxCount);
    //et je le passe ensuite à une fonction comme cela
    int pBinarySearch(char *sortedData, char *keyword, char (*addresses)[ADDRESS_LEN], int maxCount)
    {
    vector <char*> keys;
    //...
    addresses[current_count++] = keys.at(mid);//me dit que "expression must be a modifiable lvalue"
    //...
    }
    Theoriquement, addresses doit contenir (au plus maxCount) char* de taille ADDRESS_LEN chacun... Est-ce que tout ça est juste?

  6. #6
    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
    Citation Envoyé par ncheboi Voir le message
    J'ai pas le choix du format ... Je dois stocker dans un tableau des char* de longueurs connues...
    Je réitère, en quoi un tableau bidimensionnel (ou un tableau de tableau si tu le souhaites vraiment) ne convient-il pas ?


    Citation Envoyé par ncheboi Voir le message
    On me donne ça comme exemple mais j'ai un peu du mal à comprendre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #define ADDRESS_LEN 32
    //...
    char (*addresses)[ADDRESS_LEN];
    addresses = (char (*)[ADDRESS_LEN])malloc(sizeof(char)*ADDRESS_LEN*maxCount);
    //et je le passe ensuite à une fonction comme cela
    int pBinarySearch(char *sortedData, char *keyword, char (*addresses)[ADDRESS_LEN], int maxCount)
    {
    vector <char*> keys;
    //...
    addresses[current_count++] = keys.at(mid);//me dit que "expression must be a modifiable lvalue"
    //...
    }
    Theoriquement, addresses doit contenir (au plus maxCount) char* de taille ADDRESS_LEN chacun... Est-ce que tout ça est juste?
    Dans le code que tu donnes pour la fonction pBinarySearch(), addresses a simplement besoin d'être un tableau de char*, ce n'est pas lui qui gère la mémoire des éléments pointés par tes char* (puisqu'il existe avant lui). A moins que tu souhaites copier le contenu de la mémoire pointée par ces char* dans addresses et pas seulement leur adresse, mais dans ce cas la ligne addresses[current_count++] = keys.at(mid); est fausse.

    Bref, que cherches-tu précisément à faire ?

    PS : au passage, on est ici sur le forum C++ pas C.

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 145
    Points : 77
    Points
    77
    Par défaut
    Desole de m'etre trompe de forum. Le truc c'est que je code en C++ mais que j'ai des contraintes du C... Bref, les prototypes des fonctions me sont imposes (prof).

    Du coup, je suis oblige de faire un peu de gymnastique avec les pointeurs.
    J'ai donc addresses qui va pointer vers un 32 char... en gros, addresses est un char*. Sauf que j'alloue assez de memoire pour avoir maxCount char* les un en dessous des autres. du coup,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char (*addresses)[ADDRESS_LEN];
    addresses = (char (*)[ADDRESS_LEN])malloc(sizeof(char)*ADDRESS_LEN*maxCount);
    me donne un tableau 2D.
    Pour acceder au premier element j'ai le pointeur addresses.
    Je peux donc faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strncpy(*addresses,"tests",5); //rempli les 5 premiers chars de addresses avec "tests", le debugger de visual me le montre bien
    Si je fais addresses + 1 , je passe a la deuxieme ligne, pareil debugger de visual est d'accord. par contre ici, addresses + 1 n'equivaut pas a addresses[1].....
    Dites moi si je me trompe.

    ca aurait ete plus simple d'avoir un char** mais bon, j'ai pas choisi le format....

    ps: desole pour le manque d'accent, je suis sur un clavier anglais

Discussions similaires

  1. Différence entre char &r='c' et char r='c'
    Par deubelte dans le forum C++
    Réponses: 49
    Dernier message: 09/03/2010, 17h50
  2. différence entre char a[20]="str" et char *a="str"
    Par iBen68 dans le forum Débuter
    Réponses: 4
    Dernier message: 31/10/2009, 03h22
  3. différence entre int et char
    Par hassiba_45 dans le forum C++
    Réponses: 4
    Dernier message: 12/06/2008, 21h53
  4. [Free Pascal] Mini-tutoriel : Différence entre char et chr (auto-analyse de code)
    Par Clandestino dans le forum Free Pascal
    Réponses: 14
    Dernier message: 24/03/2007, 18h18

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