Passage de tableau à 3 dimensions en paramètre à une fonction

Résolu
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011 - 25 mai 2010 à 04:57
cs_snake57 Messages postés 204 Date d'inscription vendredi 19 novembre 2004 Statut Membre Dernière intervention 1 novembre 2011 - 25 mai 2010 à 23:56
Bonjour à tous,

J'ai un tableau à 3 dimensions que je veux afficher à partir d'une fonction. J'ai donc créé une fonction mais celle-ci affiche...n'importe quoi

Lorsque j'affiche mon tableau à partir du main, tout va bien. Mais dès que c'est la fonction qui l'affiche, ca me met n'importe quoi.

Peut être que je mis prend mal avec les pointeurs.

Ce que je veux faire tout simplement c'est afficher mon tableau à partir de ma fonction.

Je vous met le code pour plus de clarté (il est pas long rassurez-vous)



#include <stdio.h>
#include <stdlib.h>

int affichage(char *tAb, int dIm1,int dIm2,int dIm3); // Cette fonction réalise l'affichage.


int main()
{
    int i,j,k;//Variables de boucles

    char tAbGrille[9][21][1];//Tableau à trois dimensions
    char *pTab = tAbGrille;//Pointeur de ce tableau
  
    //Initialisation du tableau, on remplit celui-ci avec des caractères '_'.
    for (i=0; i<=9; i++){
        for (j=0; j<=21; j++){
            for (k=0; k<=1; k++){
                tAbGrille[i][j][k] = '_';
            }
        }
    }
    //affichage pour testé si il a bien été remplie <==ici tous s'affiche bien
    for (i=0; i<=9; i++){
        for (j=0; j<=21; j++){
            for (k=0; k<=1; k++){
                printf(" %c ", tAbGrille[i][j][k]);
            }
        }
    }

    affichage(pTab, 9, 21, 1);//appelle de la fonction
    return 0;
}


int affichage(char *tAb, int dIm1,int dIm2,int dIm3)
{
    int i,j,k;//Variables de boucles

    //Affichage du tableau <== Ici l'affichage n'est pas correct.
    for (i=0; i<=dIm1; i++){
        for (j=0; j<=dIm2; j++){
            for (k=0; k<=dIm3; k++){
                printf(" %c ", tAb);
                tAb++;
            }
        }
    }

    return 0;
}


8 réponses

cptpingu Messages postés 3834 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 20 octobre 2021 125
25 mai 2010 à 12:30
Fonctionne techniquement, mais génère un gros warning. Je te déconseille cette méthode.
Préfère la seconde.
#include <stdio.h>
#include <stdlib.h>

int affichage(char* tAb, int dIm1,int dIm2,int dIm3)
{
  int i,j,k;

  for (i = 0; i < dIm1; ++i)
    for (j = 0; j < dIm2; ++j)
      for (k = 0; k < dIm3; ++k)
      {
printf(" %c ", *tAb);
++tAb;
      }

  return 0;
}

int main(void)
{
  int i,j,k;

  char tAbGrille[9][21][1];
  char* pTab = tAbGrille;

  /* Initialisation du tableau,
     on remplit celui-ci avec des caractères '_'. */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
tAbGrille[i][j][k] = '_';

  /* affichage pour testé si il a bien été remplie
     <==ici tous s'affiche bien */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
printf(" %c ", tAbGrille[i][j][k]);

  affichage(pTab, 9, 21, 1);

  return 0;
}


Préfère cette méthode, plus rigoureuse:
#include <stdio.h>
#include <stdlib.h>

int affichage(char tAb[9][21][1], int dIm1,int dIm2,int dIm3)
{
  int i,j,k;

  for (i = 0; i < dIm1; ++i)
    for (j = 0; j < dIm2; ++j)
      for (k = 0; k < dIm3; ++k)
printf(" %c ", tAb[i][j][k]);

  return 0;
}

int main(void)
{
  int i,j,k;

  char tAbGrille[9][21][1];

  /* Initialisation du tableau,
     on remplit celui-ci avec des caractères '_'. */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
tAbGrille[i][j][k] = '_';

  /* affichage pour testé si il a bien été remplie
     <==ici tous s'affiche bien */
  for (i = 0; i < 9; ++i)
    for (j = 0; j < 21; ++j)
      for (k = 0; k < 1; ++k)
printf(" %c ", tAbGrille[i][j][k]);

  affichage(tAbGrille, 9, 21, 1);

  return 0;
}


_____________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
3