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 :

Initialisation d'une matrice carrée (malloc...)


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Initialisation d'une matrice carrée (malloc...)
    Coucou

    Voilà, je me demande qq chose au sujet d'une fonction d'initialisation de matrice carrée...

    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
     
    int **init(int n)
    {
       int i,j;
       int **T = malloc(n*sizeof(int *));
       if (!T) exit(0);
     
       for (i=0;i<n;i++)
       {
          T[i] = malloc(n*sizeof(int));
          if (!T[i]) exit(0);
       }
     
       for (i=0;i<n;i++)
          for (j=O;j<n;i++)   T[i][j] = 0;
     
       return T;
    }
    Ma question porte sur le premier malloc : a quoi correspond le (int *) ?

    Et on ne peut pas faire un int **T = malloc (n*n*sizeof(int)) ? (allouer la place pour la matrice carrée n )

    ha et aussi, il ne faut pas faire un cast qd on fait un malloc ? Du genre :
    T[i] = (int *) malloc (n*sizeof (int));


    Merci bcp

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Initialisation d'une matrice carrée (malloc...)
    Citation Envoyé par kilinette
    Voilà, je me demande qq chose au sujet d'une fonction d'initialisation de matrice carrée...

    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
     
    int **init(int n)
    {
       int i,j;
       int **T = malloc(n*sizeof(int *));
       if (!T) exit(0);
     
       for (i=0;i<n;i++)
       {
          T[i] = malloc(n*sizeof(int));
          if (!T[i]) exit(0);
       }
     
       for (i=0;i<n;i++)
          for (j=O;j<n;i++)   T[i][j] = 0;
    C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
    Ma question porte sur le premier malloc : a quoi correspond le (int *) ?
    La première allocation concerne la creéation d'un tableau de n pointeurs.
    Et on ne peut pas faire un int **T = malloc (n*n*sizeof(int)) ? (allouer la place pour la matrice carrée n )
    Non. On ne sait pas définir de type souple en C qui correspondrait à un tableau lineaire (monolithique). Soit on crée un tableau a une dimension,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T * tab = malloc (n * n * sizeof *tab);
    et on y accède par une fonction qui calcule l'index de l'objet en fonction des index i et j et de n, soit on fait un tableau de n pointeurs sur des tableaux de n T, ce qui est l'exemple donné.
    ha et aussi, il ne faut pas faire un cast qd on fait un malloc ? Du genre :
    T[i] = (int *) malloc (n*sizeof (int));
    La question est plutôt 'pourquoi le faire' ?

    http://emmanuel-delahaye.developpez....tes.htm#malloc

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 28
    Points : 23
    Points
    23
    Par défaut Re: Initialisation d'une matrice carrée (malloc...)
    C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
    Ben je l'ai tapé à partir d'un algo écrit sur une de mes feuilles, difficile de copier/coller, c'est une coquille du coup


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int **T = malloc(n*sizeof(int *));
    En fait je ne le comprends pas ce malloc Le sizeof(int *) veut dire quoi ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut Re: Initialisation d'une matrice carrée (malloc...)
    Citation Envoyé par kilinette
    C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
    Ben je l'ai tapé à partir d'un algo écrit sur une de mes feuilles, difficile de copier/coller, c'est une coquille du coup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int **T = malloc(n*sizeof(int *));
    En fait je ne le comprends pas ce malloc Le sizeof(int *) veut dire quoi ?
    (int *) est un type "pointeur sur int". sizeof (int*) retourne la taille d'un pointeur de ce type. La ligne d'instruction crée un tableau de n pointeurs sur int.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 28
    Points : 23
    Points
    23
    Par défaut
    Merci bcp

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

Discussions similaires

  1. Problème d'initialisation d'une matrice ?
    Par wilval dans le forum C
    Réponses: 5
    Dernier message: 04/02/2007, 16h13
  2. Inversion d'une matrice carrée d'ordre
    Par rassol3 dans le forum C
    Réponses: 2
    Dernier message: 01/12/2006, 09h40
  3. Calculer le determinant d'une matrice carrée
    Par NThierry dans le forum C
    Réponses: 15
    Dernier message: 27/08/2006, 11h31
  4. déclaration et initialisation d'une matrice
    Par Gébix dans le forum C++
    Réponses: 5
    Dernier message: 16/02/2006, 01h22
  5. Sous matrice carrée d'une matrice carrée
    Par devils55 dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2005, 19h07

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