[C] Pointeur d'un tableau dans un prototype

Résolu/Fermé
misteradri1 Messages postés 18 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 4 mai 2011 - 30 janv. 2010 à 16:47
misteradri1 Messages postés 18 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 4 mai 2011 - 30 janv. 2010 à 18:31
Bonjour,

Je suis novice dans la programmation en c et j'essaie de comprendre comment on se sers de la bête noir du langage C: les pointeurs

J'ai écrit un programme capable de chercher si une réponse est fausse ou pas lors du remplissage d'un sudoku.
Sans fonction autre que int main () tout marche merveille.
Mais lorsque j'utilise une fonction en appelant un pointeur de tableau c'est la que tout bloque

De toute évidence je ne gère pas les pointeurs de tableau

Voici un cas ( les lignes qui provoquent des erreurs sont soulignées )

int main()
{
int k;
int sudoku[9][9]={{0,4,0,0,0,2,0,1,9},
{0,0,0,3,5,1,0,8,6},
{3,1,0,0,9,4,7,0,0},
{0,9,4,0,0,0,0,0,7},
{0,0,0,0,0,0,0,0,0},
{2,0,0,0,0,0,8,9,0},
{0,0,9,5,2,0,0,4,1},
{4,2,0,1,6,9,0,0,0},
{1,6,0,8,0,0,0,7,0}};

k=reste(sudoku[0][0]);

...}

int reste(int *Psudoku[][])
{
int k=0, i, j;

for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(Psudoku[i][j]==0){k++;}
}
}
return k;
}


voici le cas ou je rajoute un prototype:

int reste(int);

...............

int reste(int *Psudoku[][])
{..........................
int k=0, i, j;

for(i=0;i<9;i++){
for(j=0;j<9;j++){
if(Psudoku[i][j]==0){k++;}
}
}
return k;
}




Si quelqu'un a un cours a proposé je suis preneur, je n'en ai trouvé aucun sur le net qui mele fonction et pointeur de tableau


Merci d'avance
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 janv. 2010 à 17:01
Salut,
Pourquoi passer par un double pointeur ? A part se compliquer la vie bien sûr ^^.
Lorsque tu envoies ton tableau en arguments, il sera converti en l'adresse du premier élément du tableau.

Ainsi :
Pour appeler la fonction : reste(sudoku); ou moins joli : reste(&sudoku[0][0]);
Et la déclaration de la fonction reste : int reste(int sudoku[][9]); /* toujours mettre le nombre de "colonnes"*/

Si t'as d'autres questions, n'hésite pas.

Cdlt,
1
misteradri1 Messages postés 18 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 4 mai 2011
30 janv. 2010 à 18:17
Voila sa marche :-D
Ducoup je suis soulagé...

Cependant sa ne marche pas si je déclare le prototype: int reste(int); juste après les #include

Je pense que c'est du au (int) qui ne correspond pas au type de tableau, mais la je ne suis pas assez expérimenté pour l'affirmer
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
30 janv. 2010 à 18:27
En effet, t'as vu juste ;-))).

Pour déclarer le prototype, il faut mettre à la place de int reste(int) : int reste(int [][9]);
0
misteradri1 Messages postés 18 Date d'inscription jeudi 30 avril 2009 Statut Membre Dernière intervention 4 mai 2011
30 janv. 2010 à 18:31
alléluia \o/ sa fonctionne enfin

Merci fiddy pour ton aide
0