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 vers un tableau


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Pointeur vers un tableau
    Désolé, vous avez déjà répondu à des questions similaires à celle-là surement, mais malgré ma recherche sur le forum je n'ai rien trouvé qui réponde parfaitement à mon problème.
    J'ai un tableau d'entiers tab, et un pointeur tabptr vers ce tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    static int tab[500][500];
    int *tabptr = &tab;
    Dans une autre fonction j'ai besoin d'utiliser ce tableau. Vu qu'il pèse 1 Mo je ne peux pas me permettre de le passer en paramètre, donc je passe à la fonction un pointeur vers ce tableau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int fonction(int tabptr)
    Mais je n'arrive pas à utiliser le tableau depuis cette fonction, et je n'ai pas trouvé la réponse sur le forum. J'ai essayé à peu près toutes les solutions imaginables (sauf la bonne sûrement !) avec l'opérateur d'indirection, comme par exemple :
    Merci de m'aider !

  2. #2
    Membre émérite
    Avatar de la drogue c'est mal
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    2 253
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 2 253
    Points : 2 747
    Points
    2 747
    Par défaut
    int fonction(int* tabptr)

    valeur = tabptr[i][j]
    il y a du linge sur la corde à linge

  3. #3
    Membre régulier

    Profil pro
    none
    Inscrit en
    Août 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Août 2002
    Messages : 80
    Points : 96
    Points
    96
    Par défaut
    Salut,

    Les tableaux sont toujours passés par adresse et non par valeur. De plus lorsque tu passes un pointeur à une fonction tu dois lui annoncer à quoi elle doit s'attendre eg :
    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
     
    int tab[5];
    mafonction(int tab);
     
    mafonction(int tableau)
    {
    tableau[0]=1;
    *(tableau + 1) = 2;
    }
    //lors du passage du tableau à ma fonction je lui ai indiqué que le type passé était entier j'ai donc pu faire *(tableau + 1) = 2 (à lui de jouer avec la mémoire pour savoir ou commence tableau + 1.
    maintenant si tu crées un tableau de 500 par 500 si tu ne précise pas à ta fonction à quoi s'attendre la fonction ne s'aura pas que faire tableau + 1 est = adresse tableau + taille(élément) * 500. Donc tu dois lui indiquer les dimensions de ton tableaux eg :
     
    int tab[500][500];
     
    mafonction(int tab);
     
    mafonction(int tableau[500][500])
    {
    tableau[0][0]=1;
    *(tableau[0] + 1) = 2; // Ici tu lui dis 1 ligne 2 eme élément.
    }
    pour finir int[500][500] correspond à une sorte de type comme int, char, d'ailleur tu peux créer un alias.


    angi.

  4. #4
    Membre averti

    Inscrit en
    Juin 2002
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 97
    Points : 307
    Points
    307
    Par défaut
    Un tableau ne peut être transmis par valeur à une fonction (pas directement du moins).
    Il est "décomposé" en pointeur sur son premier élément automatiquement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static int tab[500][500];
    int fonction(int ftab[500][500]); //spécification complète mais redondante et trompeuse
    int fonction(int ftab[][500]); //la première dimension est optionnelle, pas les suivantes
    int fonction(int* ftab[500]); //ce qui est vraiment passé: un pointeur
    Ces trois formes sont équivalentes pour le compilateur, ftab s'utilise comme tab, sauf pour sizeof.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int *tabptr = &tab; //erreur
    int *tabptr[500] = tab; //ok
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    &tab; //je recommende d'éviter cette forme, et de plutôt:
    tab; //soit compter sur la décomposition automatique en pointeur
    &tab[0]; //soit demander explicitement un pointeur sur le premier élément
    En effet, &tab est un authentique pointeur sur le tableau en entier.
    Il s'utilise comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int (*tabptr)[500][500] = &tab; //& obligatoire
     
    int fonction(int (*ftab)[500][500]){ //toutes dimensions obligatoires ici
    	(*ftab)[0][0])= 0; //accès au tableau
    }
    int main(void){
    	fonction(tabptr);
    	fonction(&tab);
    }
    Dernier mot:C'est équivalent, ça donne accès à un élément du tableau, que tab soit un tableau ou un pointeur.

    Abordé dans une FAQ C française: http://www.isty-info.uvsq.fr/~rumeau...lc007.html#q_2
    "J'ai toujours rêvé d'un ordinateur qui soit aussi facile à utiliser qu'un téléphone. Mon rêve s'est réalisé : je ne sais plus comment utiliser mon téléphone."-Bjarne Stroustrup
    www.stroustrup.com

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 08/11/2014, 00h44
  2. Réponses: 5
    Dernier message: 05/12/2011, 20h50
  3. Réponses: 3
    Dernier message: 23/06/2009, 16h40
  4. pointeur vers un tableau.
    Par munck dans le forum C
    Réponses: 18
    Dernier message: 20/01/2007, 21h44
  5. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34

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