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 :

fct avec tableau a 2 dimensions


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    Par défaut fct avec tableau a 2 dimensions
    Bonjour,
    Peut on creer une fonction qui prend pour argument un tableau a deux dimensions sans présiser sa taille y compris celle de la deuxième composante.
    J'imagine qu'il faut utiliser une allocation dynamique mais dans ce cas je ne peux pas la mettre en #include "fonction.h", il faudra la mettre dans le main. Est bien cela?
    Merci

  2. #2
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Bonjour,

    un exemple tout simple de prototype de fonction qui prends un tableau 2D en paramètres :

    Ça répond à ta question?
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2007
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 70
    Par défaut
    Merci mais je crois que quelques chose m'échappe,
    Pourquoi est ce différent de
    void fonct(double tab[][]) ? Je pensais que cela faisait également un pointeurs de pointeurs? dans le tuto que j'ai lu il est dit que je suis obligé de spécifier le deuxième argument i.e
    void fonct( double canape[][69]) .

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par kharg Voir le message
    Merci mais je crois que quelques chose m'échappe,
    Pourquoi est ce différent de
    void fonct(double tab[][]) ? Je pensais que cela faisait également un pointeurs de pointeurs? dans le tuto que j'ai lu il est dit que je suis obligé de spécifier le deuxième argument i.e
    void fonct( double canape[][69]) .
    C'est exact.
    Uniquement pour les tableaux à une dimension, la dimension n'a pas besoin d'être précisée. Pour les tableaux à plusieurs dimensions, toutes les dimensions, sauf la première, doivent être précisées.

    La solution est donc de passer un tableau à une dimension.
    Pour obtenir un tableau à deux dimensions à partir de ce tableau à une dimension, on utilise un tableau de pointeurs. Chaque pointeur contient l'adresse d'une ligne du tableau à deux dimensions. Les éléments de chaque ligne sont, dans ton cas, des doubles. Les pointeurs sont donc des double *, le tableau de pointeurs est alors du type double * [] qui passé en argument d'une fonction donne le type d'argument double** (de la même façon qu'un tableau une dimension de double, de type double [], donne un type d'argument double *).

    Cette structure passe donc, pour accéder aux éléments du tableau à deux dimensions, par un tableau intermédiaire de pointeurs. C'est le prix à payer. Elle est souvent construite en allocation dynamique, mais ce n'est pas une obligation. Elle permet d'utiliser la notation [][].

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Le fond du problème c'est que les tableaux à 2 dimensions, strictement parlant, n'existent pas en C. Ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int tableau[10][20] = {0};
    définit et initialise un tableau de 10 tableaux de 20 ints. Ainsi, nous avons un tableau à 1 dimension contenant des éléments de type tableau de 20 ints. Lorsqu'on désire passer un tel tableau à une fonction, la fonction en question possède le prototype suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_retour fonction(int tab[][20]);
    Ce qui est strictement équivalent à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type_retour fonction(int (*tab)[20]);
    L'argument tab reçoit donc à l'adresse d'un objet de type tableau de 20 ints correspondant à l'adresse du 1er élement du tableau 2D qu'on désire passer à la fonction. Pour plus de flexibilité et pour s'affranchir du besoin de devoir spécifier la taille du tableau pointé par tab, il faut utiliser l'allocation dynamique.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

Discussions similaires

  1. paramètrer une fonction avec un tableau de deux dimensions
    Par dark_geek dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/02/2010, 14h01
  2. Stack avec Tableau 2 dimension
    Par Namson dans le forum C
    Réponses: 0
    Dernier message: 25/07/2009, 10h07
  3. test sur colonne avec tableau à dimensions multiple
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/07/2009, 14h52
  4. Sorte de tableau a 2 dimension avec un vecteur
    Par undercrash dans le forum SL & STL
    Réponses: 7
    Dernier message: 10/10/2007, 11h52
  5. [Débutant] Problème avec tableau à deux dimensions
    Par beegees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/12/2006, 14h06

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