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
5 août 2008 à 15:39
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.
4 août 2008 à 19:33
pointeur de constante, une petite faute de frappe :)
4 août 2008 à 19:32
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....
4 août 2008 à 18:56
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.