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 :

Question sur les pointeurs


Sujet :

C

  1. #1
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut Question sur les pointeurs
    bonjours , j'ai voulu m'entrainer un peu sur les pointeur et j'ai fait un petit programme tous simple qui affiche les resultats d'un tableau double dimension :
    le probleme est qu'il m'affiche un warning meme si sa marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #include <stdio.h>
     
    void print(int **p);
     
    int main(void){
        int multi[3][4]= {{1,2,3,4},
                          {5,6,7,8},
                          {9,10,11,12}
                        };
       print(multi);
       return 0;
    }
     
    void print(int **p){
        int i=0;
        int *pp = (int*)p;
        for(i=0;i<12;i++){
            printf("%d ",*pp);
            (pp)++;
        }
    }
    voila le warning
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C\main.c:12: warning: passing arg 1 of `print' from incompatible pointer type
    j'aimerais savoir pourquoi il me l'affiche s'il vous plait .
    Merci

  2. #2
    Débutant Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Points : 117
    Points
    117
    Par défaut
    bonjour,
    c'est un print ou un printf????
    je pense que c'est ici l'erreur
    Le jour est le père du labeur et la nuit est la mère des pensées.

  3. #3
    Membre éprouvé
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Points : 1 067
    Points
    1 067
    Par défaut
    Tu passes un tableau (~pointeur) d'entiers à une fonction qui attend un pointeur de pointeur d'entiers. Tu n'as pas de problème parce que tu castes par la suite ton int **p en int *pp .
    "L'ordinateur obéit à vos ordres, pas à vos intentions." [Anonyme]

  4. #4
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Ah oui en effet, ton '**' ne sert à rien, en fait ton code est équivalent à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <stdio.h>
     
    void print(int *p);
     
    int main(void){
        int multi[12]= {1,2,3,4,5,6,7,8,9,10,11,12};
       print(multi);
       return 0;
    }
     
    void print(int *p){
        int i=0;
        for(i=0;i<12;i++){
            printf("%d ",*p);
            (p)++;
        }
    }

    ton cast t'a induits en erreur, il ne sert à rien et ton pointeur de pointeur non plus.

    Si je ne raconte pas de connerie, un pointeur de pointeur n'est pas un tableau à 2 dimensions. Il faut que tu vois un pointeur de pointeur comme un tableau de pointeurs (qui eux-mêmes peuvent être un tableau à 1 dimension).
    Ce n'est pas tout à fait la même chose.

  5. #5
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    @cyrine : print est une fonction que j'ai cree .
    @spout : oui c'est pour sa je ne comprend pas le warning .
    @fregolo : je veut travailler avec un tableau double dimension et non une dimension c'est pourquoi je n'ai vraiement pas compris ce que tu a dit

  6. #6
    Membre averti Avatar de elmcherqui
    Profil pro
    Inscrit en
    Février 2008
    Messages
    281
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Maroc

    Informations forums :
    Inscription : Février 2008
    Messages : 281
    Points : 382
    Points
    382
    Par défaut
    sujet resolu :
    en effet avec un cast (int**) il n'ya plus de warning .
    merci en tous cas pour vos reponses .

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par elmcherqui Voir le message
    @cyrine : print est une fonction que j'ai cree .
    @spout : oui c'est pour sa je ne comprend pas le warning .
    @fregolo : je veut travailler avec un tableau double dimension et non une dimension c'est pourquoi je n'ai vraiement pas compris ce que tu a dit
    int **: un pointeur sur des pointeurs de int
    int [][]: un tableau à 2 dimensions. Un tableau à deux dimensions reste un pointeur sur un int. C'est comme un tableau à une dimension. La différence est que quand tu écris tab[i][j] c'est traduit en tab[i*NbCol + j].

  8. #8
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Dans ton exemple le type de multi est int [][4]

    Pour ne pas avoir de warning sans faire de trantypage, il aurait fallu que ta fonction prenne ce type comme argument.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void printTab4(int tab[][4], size_t x){
        size_t i,j;
        for(i=0;i<x;i++)
           for(j=0;j<4;j++)
              printf("%d ",tab[i][j]);
    }
    (la deuxième dimention est passée en argument de la fonction)

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Maintenant si tu voulais une fonction génerique qui affiche ce type de tableau un pointeur sur int aurait suffit. Mais il faut passer les dimensions du tableau en argument à la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void printStaticTab(int *pstab, size_t x, size_t y){
        size_t i;
        for(i=0;i<x*y;i++)
           printf("%d ",pstab[i]);
    }
    (transtypage sera necessaire à l'appel de la fonction pour ne pas avoir de warning.)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur les pointeurs génériques
    Par mikedavem dans le forum C
    Réponses: 16
    Dernier message: 24/05/2006, 11h56
  2. question sur les pointeurs
    Par jd.baculard dans le forum Langage
    Réponses: 3
    Dernier message: 18/03/2006, 02h30
  3. [Debutant] Nouvelle question sur les pointeurs
    Par etiennegaloup dans le forum Débuter
    Réponses: 3
    Dernier message: 11/01/2006, 09h55
  4. Question sur les pointeurs.
    Par Chrisemi dans le forum C++
    Réponses: 5
    Dernier message: 28/10/2005, 23h47
  5. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25

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