Un tableau multidimentionnel comme parametre de fonction en c++

Soyez le premier à donner votre avis sur cette source.

Snippet vu 10 132 fois - Téléchargée 19 fois

Contenu du snippet

Ce tutoriel est destiner à montrer les différentes façons de transmettre un tableau multidimensionnel à une fonction en c/c++...
Attention, les tableaux, et ce quelque soit la méthode d'appel, sont toujours transmis par référence (adresse mémoire) donc directement accessible et modifiable par la fonction...
Je vous laisse découvrir les différentes façon (la troisième étant la plus élégante)

Inspirée de Le Langage C++ par Bjarne Stroutrup

Source / Exemple :


//============================================================================
// Name        : test.cpp
// Author      :
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <string>
using namespace std;

void jepresumedetout(string m[3][5])
{
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << m[i][j] << '\t';
        }
        cout << "\n";
    };
}

void jepresumedescolonnes(string m[][5], int x)
{
    for (int i = 0; i < x; i++)
    {
        for (int j = 0; j < 5; j++)
        {
            cout << m[i][j] << '\t';
        }
        cout << "\n";
    };
}

/**

  • void jenecompilepas(string m[][], int x, int y)
{ for (int i = 0; i < x; i++) { for (int j = 0; j < 5; j++) { cout << m[i][j] << '\t'; } cout << "\n"; }; }
  • /
void jenepresumederien(string* m, int x, int y) { for (int i = 0; i < x; i++) { for (int j = 0; j < y; j++) { cout << m[i * y + j] << '\t'; } cout << "\n"; }; } int main() { string mtab[3][5] = { { "a", "b", "c", "d", "e" }, { "f", "g", "h", "i", "j" }, { "k", "l", "m", "n", "o" } }; cout << "!!!Je présume de tout!!!" << endl; // prints !!!Hello World!!! jepresumedetout(mtab); cout << "!!!Je présumes colonnes!!!" << endl; // prints !!!Hello World!!! jepresumedescolonnes(mtab,3); cout << "!!!Je ne présume de rien!!!" << endl; // prints !!!Hello World!!! jenepresumederien(&mtab[0][0], 3, 5); return 0; }

Conclusion :


Voilà j'espère aidé quelques débutants

A voir également

Ajouter un commentaire

Commentaires

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
"si on veut empêcher tout modification" == "accessible en lecture uniquement"
non?

attention à la signification de 'portée' : il s'agit du domaine où l'on peut utiliser une variable, qu'elle soit ou non modifiable n'y change rien.

Sur ce, bonne continuation.
Messages postés
403
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
3 septembre 2012
2
désolé :
pointeur de constante, une petite faute de frappe :)
Messages postés
403
Date d'inscription
dimanche 12 août 2001
Statut
Membre
Dernière intervention
3 septembre 2012
2
En effet, cette affirmation est très juste, mais il faudra aussi ajouter que le fait de rajouter 'const' empêche l'affectation de nouvelle valeur à mon tableau, il est accéssible en lecture uniquement...
Ici il faut surtout que les débutants fassent la distinction entre la porté des variables :
- le fait de modifier la valeur d'un paramètre d'une fonction sans que cela ne change sa valeur pour la suite de l'exécution du programme (portée locale).
- le fait transmettre un pointeur de constant (! différent des pointeurs constants ), interdisant ainsi la modification de la variable....
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
"Attention, les tableaux, et ce quelque soit la méthode d'appel, sont toujours transmis par référence (adresse mémoire) donc directement accessible et modifiable par la fonction..."

dans le cas de tes exemples oui, mais si on veut empêcher toute modification :
void jenepresumederien(const string* m, int x, int y){...}

Peut-être éviter d'utiliser le terme 'référence' dans ce cas, risque de confusion avec les références du C++. D'accord au final ça revient au même mais dans le cadre des références on manipule (du point de vue utilisateur) l'objet et pas un pointeur.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.