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 :

question sur une déclaration de tableau


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 51
    Points
    51
    Par défaut question sur une déclaration de tableau
    Bonjour

    j'ai remarqué que si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int matrice_adj[4][4]={
                   {1,1,1,0},
    	{1,1,1,0},
       	{1,1,1,0}, 
                   {0,0,0,1} 
                  };
    cout <<matrice_adj[3][3]<<endl;
    ben le programme marche (bon "cout" c'est pas du C mais bon)

    et si je déclare ainsi toutes les cases :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int matrice_adj[3][3];
     
                 matrice_adj[3][0] = 0;
    	matrice_adj[3][1] = 0;
    	matrice_adj[3][2] = 0;
    	matrice_adj[3][3] = 1; // dernier point de ma matrice
    cout <<matrice_adj[3][3]<<endl;
    ben là j'ai un affichage et une erreur dans la mémoire quelque part.
    (pareil si je fais int matrice_adj[4][4];)

    (j'ai un tableau de 4 colonne 4 lignes)

    les 2 déclaration me semblaient pourtant justes.

    merci

  2. #2
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    414
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 414
    Points : 354
    Points
    354
    Par défaut
    moi je dirai qu'il faut que tu revoi tes cours sur les tableau....

    quand tu defini un tableau tab[3]
    l'indice max est 2....pas 3 ! (a cause du 0)

    sinon....c'est pas du C !donc t'es pas dans le bon forum

  3. #3
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Salut,

    C'est drôle de poster du code C++ sur un forum C, mais bon...

    Citation Envoyé par isidore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int matrice_adj[4][4]={
                   {1,1,1,0},
    	{1,1,1,0},
       	{1,1,1,0}, 
                   {0,0,0,1} 
                  };
    cout <<matrice_adj[3][3]<<endl;
    ben le programme marche (bon "cout" c'est pas du C mais bon)
    Cela fonctionne, pas de surprise ici!

    Citation Envoyé par isidore
    et si je déclare ainsi toutes les cases :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int matrice_adj[3][3];
     
                 matrice_adj[3][0] = 0;
    	matrice_adj[3][1] = 0;
    	matrice_adj[3][2] = 0;
    	matrice_adj[3][3] = 1; // dernier point de ma matrice
    cout <<matrice_adj[3][3]<<endl;
    ben là j'ai un affichage et une erreur dans la mémoire quelque part.
    Normal, tu as déclaré un tableau de 3x3. Les indices pour chacune des dimensions varient entre 0 et 2. matrice_adj[3][3] est en dehors de la mémoire réservée pour le tableau.

    Citation Envoyé par isidore
    les 2 déclaration me semblaient pourtant justes.
    Le code ci-dessus n'est pas correct, car tu essaies d'accéder à un espace mémoire hors du tableau.

    Thierry

  4. #4
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    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
    #include <stdio.h>
     
    int main(void)
    {
        int matrice_adj[4][4];
     
        matrice_adj[3][0] = 0;
        matrice_adj[3][1] = 0;
        matrice_adj[3][2] = 0;
        matrice_adj[3][3] = 1; 
     
        fprintf(stdout, "%d\n", matrice_adj[3][3]);
     
        return 0;
    }
    Ce code fonctionne correctement!

    Thierry

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 51
    Points
    51
    Par défaut
    merci pour la réponse
    (en fait je code en C mais je mets des "cout" pour faire simple
    donc c'est du C sauf pour les printf où je remplace par cout pour des raison de facilités.=

  6. #6
    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 : 47
    Localisation : Suisse

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Points : 5 360
    Points
    5 360
    Par défaut
    Citation Envoyé par isidore
    merci pour la réponse
    (en fait je code en C mais je mets des "cout" pour faire simple
    donc c'est du C sauf pour les printf où je remplace par cout pour des raison de facilités.=
    cout ne fait pas partie du langage C. Si tu l'utilises, tu fais donc du C++ et compile avec un compilateur C++. Le fait que tu n'utilises qu'un sous-ensemble du langage excluant les extensions orientées-objets ne font pas de ton programme un programme C pour autant.

    Si c'est en langage C que tu désires programmer, il n'y a aucune raison d'utiliser cout. Si tu programmes en C++ dans un style procédural proche du C, tu programmes en C++ puisqu'aucun compilateur C n'acceptera ton fichier source. Si tu désire te former sur le langage C, n'utilise pas cout, mais les fonctions fournies par la bibliothèque standard de C.

    Thierry

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

Discussions similaires

  1. Question sur une déclaration de fonction
    Par deubelte dans le forum Débuter
    Réponses: 2
    Dernier message: 08/03/2010, 10h13
  2. [Newbies] Question sur une technologie XML a utiliser
    Par superraider dans le forum Windows
    Réponses: 3
    Dernier message: 21/10/2005, 10h01
  3. [jdbc] question sur une connection
    Par berg dans le forum JDBC
    Réponses: 2
    Dernier message: 10/09/2005, 08h29
  4. decalage à gauche sur une tres grand tableau de char
    Par petitours dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/07/2005, 22h40
  5. Lien sur une ligne de tableau
    Par Oluha dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/02/2005, 11h36

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