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 :

déclaration d'un tableau dynamique


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juin 2012
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 7
    Par défaut déclaration d'un tableau dynamique
    salut ,
    j'ai un petit problème lors de la déclaration d'un tableau dynamique à l'aide des intructions suivantes :
    et
    car dans le cours j'ai vue que ce sont des déclarations dynamique mais ça ne marhe pas
    et merci

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    Citation Envoyé par faiez2012 Voir le message
    salut ,
    j'ai un petit problème lors de la déclaration d'un tableau dynamique à l'aide des intructions suivantes :
    et
    car dans le cours j'ai vue que ce sont des déclarations dynamique mais ça ne marhe pas
    et merci
    Dans quel cours ?

    Le nombre d'élément est normalement fixé à la compilation soit par le nombre indiqué entre les crochet Type tab[4] soit par le nombre d'élément qu'on lui donne lors de l'initialisation s'il n'y a rien entre crochet Type tab[] = {4,5,5}.

    A noter que char toto[] = "ee" est équivalant à char toto[] = {'e', 'e', '\0'}.

    Mais depuis le C99 on peut "tricher" en ayant des tableaux dont la taille est défini à l'initialisation (utilise l'allocation dynamique me semble) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void foo(int nbElement)
    {
              Type tab[nbElement];
    }
    C'est une "Variable-length array".


    Sinon, tu peux utiliser l'allocation dynamique avec free, malloc et realloc.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Mais depuis le C99 on peut "tricher" en ayant des tableaux dont la taille est défini à l'initialisation (utilise l'allocation dynamique me semble)
    C'est en général "stack-allocated" (je ne suis pas sûr de ce que tu entends par "allocation dynamique").

    La notation "tab[]" peut se rencontrer dans les paramètres d'une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     int foo(int tab[]) {
      return tab[2];
    }
    Il y a peut-être une subtilité avec "int *tab" mais elle m'échappe là

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Citation Envoyé par Joker-eph Voir le message
    C'est en général "stack-allocated" (je ne suis pas sûr de ce que tu entends par "allocation dynamique").
    Par "allocation dynamique" j'entends allocation dynamique

    Citation Envoyé par Joker-eph Voir le message
    La notation "tab[]" peut se rencontrer dans les paramètres d'une fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     int foo(int tab[]) {
      return tab[2];
    }
    Il y a peut-être une subtilité avec "int *tab" mais elle m'échappe là
    Il n'y a aucune différence entre int * tab et int tab[] (et même avec int tab[X]) dans le prototype d'une fonction, ce sont tous 3 des pointeurs et non des tableaux.

  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
    Mais depuis le C99 on peut "tricher" en ayant des tableaux dont la taille est défini à l'initialisation (utilise l'allocation dynamique me semble) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     void foo(int nbElement)
    {
              Type tab[nbElement];
    }
    C'est une "Variable-length array".
    Les VLA sont toujours en allocation automatique (ne peuvent être créés que comme variables locales)

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    329
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 329
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Par "allocation dynamique" j'entends allocation dynamique
    Pour moi "dynamique" est en opposition à statique : c'est la différence entre "connu à la compilation" et "connu à l'exécution". Je range les VLA dans de l'allocation dynamique, tout comme l'utilisation d'alloca().
    Vu que c'est du C99, ça peut expliquer que ce n'est pas inclus dans le cours, mais le terme "allocation dynamique" reste du coup ambiguë.

  7. #7
    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
    Ce n'est pas ambigu : il y a trois (et non deux) méthodes de créations d'objets (reconnues par la norme) : allocation statique, allocation automatique et allocation dynamique. Elles se différencient par la méthode de création de l'objet et sa durée de vie.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/01/2008, 18h16
  2. Réponses: 1
    Dernier message: 09/03/2006, 17h25
  3. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  4. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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