[C] Pointeur d'un tableau dans un prototype

Résolu
misteradri1 Messages postés 21 Statut Membre -  
misteradri1 Messages postés 21 Statut Membre -
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 11653 Statut Contributeur 1 847
 
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 21 Statut Membre
 
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 11653 Statut Contributeur 1 847
 
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 21 Statut Membre
 
alléluia \o/ sa fonctionne enfin

Merci fiddy pour ton aide
0