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 :

pointeur de pointeur


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut pointeur de pointeur
    Bonjour,
    J'ai un soucis pour appeler la fonction suivante qui contient comme argument un pointeur de pointeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void elmhes(float **a, int n){
    ...
    a[i][j]=...
    ...
    }
    Comment dois je faire pour appeller cette fonction, a est un tableau 2 dimensions. J'ai tenté la chose suivante sans succès. Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    float test_a [3][3];
     
    test_a [0][0] = 1;
    ...
    test_a [2][2] = 9;
     
    elmhes(&test_a, 3);

  2. #2
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut

    Grosse bêtise que j'ai écris là

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Non, la conversion entre [][] et ** est impossible (du fait de la modélisation en mémoire), mais je ne me souvient plus comment il faut spécifier la demander d'argument... il faut qu'une des dimensions soient fixe mais je sais plus laquelle...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  4. #4
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Il me semblais bien que j'avais dis une bêtise...

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par crocodilex
    Il me semblais bien que j'avais dis une bêtise...
    lol, t'inkt, tout le monde s'est déjà fait avoir

    il faudrait le mettre dans la ce truc quand même

    @petdelascar : tu peux nous donner le message d'erreur que tu as quand tu essaie ce que tu donne crocodilex ?
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Membre éprouvé
    Avatar de doudoustephane
    Homme Profil pro
    Gérant
    Inscrit en
    Août 2005
    Messages
    1 129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 129
    Par défaut
    et pourquoi ne pas utiliser un pointeur simple??

  7. #7
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Sinon ça qui marche, mais ne me plait pas beaucoup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     void elmhes(float a[3][3], int n);
    Faudrait l'avis de Emdel...

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Y'a déjà quelque chose au sujet du passage de tableaux à plusieures dimenssions dans http://c.developpez.com/faq/c/?page=...tre_ndimension
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    241
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 241
    Par défaut
    En fait, la fonction est toute faite et marche donc je ne peux pas la modifier.
    Je sais que pour mettre un tableau en arguments d'une fonction il faut procéder ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    void fonction(int *tableau) {
    tableau[2]=...
    }
    et l'appeller ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tableau[10];
    fonction(tableau);
    Bon alors, si je rajoute un astérix, je dois donc... prise de tête les copains.

  10. #10
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par CSoldier
    Y'a déjà quelque chose au sujet du passage de tableaux à plusieures dimenssions dans http://c.developpez.com/faq/c/?page=...tre_ndimension
    Ecrit comme ça, on a l'impression qu'on passe tout le tableau en paramètre.. Et pourtant c'est bien l'adresse que l'on passe (étonnante cette écriture !!!)

  11. #11
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Oui moi non plus je suis pas trop fan !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  12. #12
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    Citation Envoyé par CSoldier
    Y'a déjà quelque chose au sujet du passage de tableaux à plusieures dimenssions dans http://c.developpez.com/faq/c/?page=...tre_ndimension
    Exacte j'avais pas vu

    Citation Envoyé par crocodilex
    Ecrit comme ça, on a l'impression qu'on passe tout le tableau en paramètre.. Et pourtant c'est bien l'adresse que l'on passe (étonnante cette écriture !!!)
    en fait, c'est parce que les modélisation en mémoire sont différentes, dans le cas d'un tableau statique à n dimensions, ce n'est pas une cascade de pointeurs qui est allouée, c'est uniquement l'espace nécessaire, et ensuite on y va en faisant i+j*taille_ligne

    ce qui veut dire que :et sont alloués exactement de la même façons en mémoire (alors que ça ne devrais logiquement pas être le cas) c'est pour ça qu'on ne peut pas transformer un [][] en **....
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  13. #13
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par Swoög
    Exacte j'avais pas vu

    en fait, c'est parce que les modélisation en mémoire sont différentes, dans le cas d'un tableau statique à n dimensions, ce n'est pas une cascade de pointeurs qui est allouée, c'est uniquement l'espace nécessaire, et ensuite on y va en faisant i+j*taille_ligne

    ce qui veut dire que : et sont alloués exactement de la même façons en mémoire (alors que ça ne devrais logiquement pas être le cas) c'est pour ça qu'on ne peut pas transformer un [][] en **....
    Elle me plaît beaucoup cette explication
    Merci Swoög.
    Et merci CSoldier pour ton lien

  14. #14
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Une autre petite question me vient à l'esprit (juste pour ma culture personnelle) :
    nous savons tous qu'on peut passer une structure en paramètre à une fonction. Et bien entendu, on ne le fait pas. Il vaut mieux passer par un pointeur sur cette structure.
    Maintenant si j'ai envie de passer un tableau en paramètre (je sais c'est idiot). Est-ce que c'est possible en C ?

  15. #15
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par crocodilex
    ...Il vaut mieux passer par un pointeur sur cette structure.
    Je pense que tout dépend du role de ta fonction, si elle est succeptible de modifier des variables membres de la structure oui, l'argument de ta fonction devra être un pointeur sur une structure du meme type et pour l'appel tu passes donc en argument l'adresse de ta structure sinon si c'est juste pour une lecture seule, pas besoin de pointeur sur la structure.

    Ceci dans le cas où la structure que tu passes en argument n'est pas un pointeur sur une structure bien evidement !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  16. #16
    CGi
    CGi est déconnecté
    Expert confirmé
    Avatar de CGi
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 061
    Détails du profil
    Informations personnelles :
    Localisation : France, Allier (Auvergne)

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 061
    Par défaut
    De toute façon il faut que la fonction connaisse la taille du tableau.

    Ça peut passer en faisant des transtypages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void elmhes(float *a)
    {
      float(*ptest_a)[3] = a;
      printf("%f\n", ptest_a[0][0]);
    }
    Mais il y a des Warning et le résultat est le même
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  17. #17
    Membre émérite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par défaut
    Citation Envoyé par CSoldier
    ....si c'est juste pour une lecture seule, pas besoin de pointeur sur la structure.
    Je ne suis pas entièrement d'accord avec toi. Si on passe un pointeur sur une structure c'est aussi pour des raisons de perfo et de taille de pile. Imagines une structure qui fait 1 Mo !!!

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par petdelascar
    J'ai un soucis pour appeler la fonction suivante qui contient comme argument un pointeur de pointeur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void elmhes(float **a, int n){
    ...
    a[i][j]=...
    ...
    }
    Comment dois je faire pour appeller cette fonction, a est un tableau 2 dimensions.
    Il faut que le tableau soit un tableau de pointeurs. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {
       float a;
       float b;
       float c;
       float *tab[] = {&a, &b, &c};
     
       void elmhes(tab, sizeof tab / sizeof *tab);
       <...>
    }

  19. #19
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par crocodilex
    Je ne suis pas entièrement d'accord avec toi. Si on passe un pointeur sur une structure c'est aussi pour des raisons de perfo et de taille de pile. Imagines une structure qui fait 1 Mo !!!
    Je parle d'un point de vue générale et de ma façon de programmer c'est tout, je fait que répondre au mieux, après s'il y'a d'autres méthodes de travail qui peuvent être mieux au niveau des performances ou autre pourquoi pas, moi je lit et je tiens compte de ce que les autres disent, j'en apprend tous les jours comme ca
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par crocodilex
    Maintenant si j'ai envie de passer un tableau en paramètre (je sais c'est idiot). Est-ce que c'est possible en C ?
    Ca n'existe pas.

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Pointeurs et pointeurs de pointeurs
    Par wallace27 dans le forum C
    Réponses: 10
    Dernier message: 09/04/2015, 23h07
  2. Réponses: 21
    Dernier message: 06/08/2009, 10h31
  3. Réponses: 6
    Dernier message: 26/05/2007, 01h33
  4. pointeur de pointeur
    Par petdelascar dans le forum C
    Réponses: 2
    Dernier message: 05/12/2005, 11h26
  5. pointeur sur pointeur
    Par gaut dans le forum C
    Réponses: 3
    Dernier message: 01/11/2005, 22h30

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