Tableaux 2 dim comme argument d'une fonction

Résolu/Fermé
pythamede Messages postés 42 Date d'inscription samedi 23 mai 2015 Statut Membre Dernière intervention 8 mars 2024 - Modifié par baladur13 le 9/01/2016 à 19:09
pythamede Messages postés 42 Date d'inscription samedi 23 mai 2015 Statut Membre Dernière intervention 8 mars 2024 - 10 janv. 2016 à 10:28
Bonjour à tous,

Ma question concerne le passage d'arguments de fonction lorsqu'il s'agit de tableaux à deux dimensions.

Pour passer un tableau à une seule dimension, je n'ai pas de difficulté. La fonction de présente comme ceci :

void ma_fonction(int *a)
{
   // et à l'intérieur je peux faire référence à n'importe quel élément du tableau a :
   a[3]=1; // par exemple
}

void main()
{
   int a[1000];
   ...
   ma_fonction(a);
}

Mais si a est à deux dimensions : int a[10][10]

Le compilateur ne proteste pas lorsque je définis a dans la fonction par "**a"

void ma_fonction(int **a)
{
   // ni même lorsque je fais référence à un élément 
   if(a[3][5]==0)
   {
      ....
   }
   // ce n'est probablement pas très orthodoxe...
}

mais le compilateur proteste au niveau de l'appel de la fonction :

void main()
{
   ...
   int a[10][10];
   ma_fonction(a);
}


Je ne comprends pas par quel miracle le compilateur accepte tout au niveau de la fonction ; est-ce réellement ce qu'il faut faire ?
Et en tous cas je n'ai pas trouvé comment faire appel à cette fonction pour que le compilateur l'accepte.

Merci de m'aider.

P.S. J'utilise Microsoft J'utilise C++, mais, à tort ou à raison, je pense que la réponse serait la même pour du simple langage C.

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 10/01/2016 à 00:54
Bonjour,

Attention, à ne pas confondre pointeur et tableau. En C, on ne peut pas passer de tableau en argument, juste des pointeurs.

Note : le bon prototype du main() sans argument est : int main(void).
Et il ne faut pas oublier : return 0; en fin de de main().

Pour répondre à ton problème, essaie : void ma_fonction(int a[][10]). Pas besoin de définir le nombre de lignes, juste le nombre de colonnes.


Google is your friend
0
pythamede Messages postés 42 Date d'inscription samedi 23 mai 2015 Statut Membre Dernière intervention 8 mars 2024 1
10 janv. 2016 à 10:28
Ça marche super bien ! Merci beaucoup. Cela faisait si longtemps que je me posais cette question !
0