Tableaux 2 dim comme argument d'une fonction

Résolu/Fermé
Signaler
Messages postés
30
Date d'inscription
samedi 23 mai 2015
Statut
Membre
Dernière intervention
13 avril 2020
-
Messages postés
30
Date d'inscription
samedi 23 mai 2015
Statut
Membre
Dernière intervention
13 avril 2020
-
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.

1 réponse

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 803
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
Messages postés
30
Date d'inscription
samedi 23 mai 2015
Statut
Membre
Dernière intervention
13 avril 2020

Ça marche super bien ! Merci beaucoup. Cela faisait si longtemps que je me posais cette question !
0