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'une matrice avec Indice const


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut Déclaration d'une matrice avec Indice const
    Bonjour tout le monde,
    j'ai un petit problème, je vaudrais par exemple déclarer et initialiser un tableau à 2 dimension avec N ligne et N colonne, le voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include<stdio.h>
    /***** 1_ Avec define*******/
    //#define N 3
    //int Mat[N][N]={{1,2,3},{1,2,3},{1,2,3}};
    //==> Résultat OK
     
    /***** 2_ const int*******/
    const int N=3;
    int Mat[N][N]={{1,2,3},{1,2,3},{1,2,3}};
     
    // Résultat NOK, 
    //error:variable-size type declared outside of any function
    //error:variable-sized object may not be initializer
    Pour un fichier.cpp le code marche T bien (N déclaré avec define ou const int) mais lorsque je le met en fichier.c ça se compile pas avec const int!!!!

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 434
    Par défaut
    ça ne sert a rien un const int

    Tu n'est pas sur un langage de type java, define c'est bien aussi ça fait la même chose mais c'est moins chiant au niveau de la synthaxe

  3. #3
    Membre averti
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Mars 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 10
    Par défaut
    Citation Envoyé par jouana Voir le message
    ça ne sert a rien un const int

    Tu n'est pas sur un langage de type java, define c'est bien aussi ça fait la même chose mais c'est moins chiant au niveau de la synthaxe
    Re,
    Ouais bien sûr J'ai adopté la solution qui marche bien:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define N 3
    int Mat[N][N]={{1,2,3},{1,2,3},{1,2,3}};
    Mais je cherche plutôt une explication??! pourquoi Const int se compile avec un fichier.cpp et non pas avec un fichier.c !!!

  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
    pourquoi Const int se compile avec un fichier.cpp et non pas avec un fichier.c !!!
    Parce que le C et le C++ sont deux langages différents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const int N=3; 
    int Mat[N][N];
    Se dire que puisque on ne peut pas modifier N, on peut donc considérer qu'on utilise une constante dans la déclaration du tableau n'est pas possible à cause des VLA du C.

    En C, ceci définit un tableau dont la taille dépend d'une variable N (const ou non n'a pas d'importance). En C99 c'est possible (on a affaire à un VLA), mais l'usage de tels tableaux est restreint par rapport aux tableaux 'ordinaires' (dont la dimension est définie par une constante). En particulier, ils doivent être alloués automatiquement (donc comme variable locale à une fonction) et ne peuvent donc être alloués en static (cas notamment des variables globales). Ils ne peuvent pas non plus être initialisés.

    Ce n'est donc pas du tout la même chose que d'écrire int Mat[3][3] (ou int Mat[N][N]; avec un #define N 3 qui précède) qui ne définit pas un VLA mais un tableau 'ordinaire'.

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

Discussions similaires

  1. Création d'une matrice d'indice
    Par stefsas dans le forum SAS Base
    Réponses: 3
    Dernier message: 30/05/2008, 17h14
  2. Créer une matrice avec TImage
    Par yann87 dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2008, 16h42
  3. Déclaration d'une matrice (m,n)
    Par dudemec dans le forum MATLAB
    Réponses: 6
    Dernier message: 08/11/2007, 18h00
  4. Calculer une matrice avec la méthode de EULER
    Par lematlabeur dans le forum MATLAB
    Réponses: 7
    Dernier message: 05/11/2007, 18h22
  5. Redimensionner une matrice avec "reshape"
    Par kmaniche dans le forum Images
    Réponses: 9
    Dernier message: 07/06/2006, 18h35

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