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 :

Passer adresse tab 2 dim structure


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Par défaut Passer adresse tab 2 dim structure
    Bonjour, je vous expose mon probleme :

    dans mon main, j'ai une matrice 3x3 remplie et je voudrais la passer a une fonction qui fait la somme de chaque ligne, chaque colonne mais je dois passer une structure a ma fonction et dans cette structure je voudrais passer uniquement l'adresse de la matrice et voila mon probleme je ne sais pas comment déclarer ce champs dans ma structure et comment faire passer cette adresse dans la structure dans mon main ?? (en fait je ne suis pas très bon avec les pointeurs et les tableaux 2 dimensions et tous ca.... j'ai déjà essayer des trucs mais rien ne fonctionne )


    voici ma structure (ne faites pas attention aux autres champs):


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct argument
    {
    	int i;
     
    	int **Matrice; // ICI je ne sais pas trop quoi ni comment
     
    	int debut[2]; //debut[0] = ligne, debut[1] = colonne
    	int fin[2]; // fin[0] = ligne, fin[1] = colonne
    };
    dans le main :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int matrice [3][3];
    struct argument args; // déclaration variable strucurée
     
    args.Matrice = ????// ICI je ne sais pas non plus :?
     
    CalculSomMatrice (&args)

    voila en gros, merci de votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut,

    j'ai du mal a voir a quoi ca sert tout ce qui a dans ta structure.

    Enfin, tu as plusieurs possibilités :

    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
     
    typedef struct s_argument
    {
    	int i;
    	int Matrice[3][3]; 
    	int debut[2];
    	int fin[2];
    } arguments;
     
    int main(void)
    {
    /* tu remplis ta struc comme ceci */
    arguments args;
    args.Matrice[0][0] = 123456;
    args.Matrice[0][1] = 234567; 
    ....
    CalculSomMatrice (&args)
    retunr (EXIT_SUCCESS);
    }
    Mais le mieux je pense est d'allouer ton tableau dynamiquement (comme ca tu peut avoir une taille de colonne et ligne variable).

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    typedef struct s_argument
    {
    	int i;
    	int **Matrice; 
    	int debut[2];
    	int fin[2];
    } Arguments;
     
    int main(void)
    {
    int **matrice;
    matrice = malloc(3 * sizeof(*matrice));
    unsigned int i = 0;
    while (i < 3)
    {
    matrice[i] = malloc (3 * sizeof(**matrice));
    ++i;
    }
     
    /* tu remplis ta matrice */
    matrice[0][0] = 123456;
    matrice[0][1] = 234567; 
    ....
    Arguments args;
    args.Matrice = matrice;
     
    CalculSomMatrice (&args)
     
    return (EXIT_SUCCESS);
    }
    Sans oublier de libérer les ressources avant de quitter le programme et de tester la valeur de retour des malloc.

    Coridlament,
    NeoKript

  3. #3
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int matrice [3][3];
    struct argument args; // déclaration variable strucurée
     
    args.Matrice = ????// ICI je ne sais pas non plus :?
    le champ Matrice doit être "adresse d'un élément du tableau matrice. Un élément de ce tableau est un tableau de 3 int : int [3]. Un pointeur sur ce tableau doit être du type int (*)[3] (avec les parenthèses)
    On obtiendra donc (avec un code exemple d'utilisation) :
    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
     
    struct argument
    {
    //....
      int (*Matrice)[3];
    //....
    }; 
    void f(struct argument *args)
    {
      args->Matrice[2][1] = 55; // par exemple
    }
    int main(void)
    {
      int matrice [3][3];
      struct argument args;
      args.Matrice = matrice ;
      f(&args);
      return 0;
    }
    NeoKript :
    Dans le deuxième code (avec les malloc), on doit avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct s_argument
    {
    ....
    	int **Matrice; 
    ....
    matrice[i] = malloc (3 * sizeof(**matrice));

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    NeoKript :
    Dans le deuxième code (avec les malloc), on doit avoir
    En effet, erreur d'écriture, j'ai corrige

  5. #5
    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
    Corrige aussi la déclaration du champ Matrice, c'est plus important.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 8
    Par défaut
    la solution de diogene m'a résolu mon problème surtout la ligne suivante que je n'avais pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //....
      int (*Matrice)[3];
    //....

    merci beaucoup à tous

Discussions similaires

  1. Passer Adresse memoryStream
    Par castorcharly dans le forum Langage
    Réponses: 28
    Dernier message: 12/03/2013, 09h34
  2. Passer par adresse dans une fonction une structure
    Par bru.antoine dans le forum C
    Réponses: 1
    Dernier message: 18/06/2012, 14h47
  3. passer l'adresse d'un membre d'une structure ?
    Par tintin72 dans le forum C
    Réponses: 6
    Dernier message: 27/12/2005, 12h20
  4. Ecrire l'adresse d'une structure dans un uint32
    Par Steph12 dans le forum C++
    Réponses: 6
    Dernier message: 17/03/2005, 16h31
  5. passer structure de C# vers C++
    Par belayay dans le forum MFC
    Réponses: 3
    Dernier message: 23/02/2005, 17h01

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