Sujet : Re: Précision sur le C
De : om+news (at) *nospam* miakinen.net (Olivier Miakinen)
Groupes : fr.comp.sys.mac.programmation fr.comp.lang.cSuivi-à : fr.comp.lang.cDate : 12. Jan 2025, 22:26:26
Autres entêtes
Organisation : There's no cabale
Message-ID : <vm1c22$9ck$1@cabale.usenet-fr.net>
References : 1
User-Agent : Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4
[diapublication, suivi vers fr.comp.lang.c]
Le 09/01/2025 19:34, kurtz le pirate a écrit :
J'ai cette fonction (trouvée sur le net) :
int find_empty(int board[SIZE][SIZE], int *row, int *col) {
for (*row = 0; *row < SIZE; (*row)++) {
for (*col = 0; *col < SIZE; (*col)++) {
if (board[*row][*col] == 0) {
return 1;
}
}
}
return 0;
}
Je ne suis pas sûr de bien comprendre les '*' devant les variables et
paramètres.
Je t'ai déjà répondu sur fr.comp.sys.mac.programmation, et dit que pour
la lisibilité j'aurais tendance à écrire *prow et *pcol à la place de
*row et *col, pour bien rappeler que prow et pcol sont des pointeurs sur
entiers plutôt que des entiers.
Pour les paramètres, on passe un pointeur sur les variables row et col
connues en dehors de cette fonction.
Mais, dans les boucles 'for', on utilise encore les pointeurs *row et
*col. Ca veut dire que les variables en dehors de cette fonction sont
incrémentées dans les boucles ?
Pour encore plus de lisibilité, il aurait même été possible d'écrire la
fonction comme ceci :
int find_empty(int board[SIZE][SIZE], int *prow, int *pcol) {
int row, col;
for (row = 0; row < SIZE; row++) {
for (col = 0; col < SIZE; col++) {
if (board[row][col] == 0) {
*prow = row;
*pcol = col;
return 1;
}
}
}
// Si on veut une compatibilité complète avec la fonction donnée
// en exemple, ajouter soit :
// *prow = row; *pcol = col;
// soit :
// *prow = *pcol = SIZE;
// Cela dit, on s'en fiche probablement.
return 0;
}
-- Olivier Miakinen