Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.sys.mac.programmation > #2705 > unrolled thread
| Started by | kurtz le pirate <kurtzlepirate@free.fr> |
|---|---|
| First post | 2025-01-09 19:34 +0100 |
| Last post | 2025-01-16 14:09 +0000 |
| Articles | 8 — 4 participants |
Back to article view | Back to fr.comp.sys.mac.programmation
Précision sur le C kurtz le pirate <kurtzlepirate@free.fr> - 2025-01-09 19:34 +0100
Re: Précision sur le C Joseph B <joseph@nowhere.invalid> - 2025-01-09 20:06 +0000
Re: Précision sur le C Olivier Miakinen <om+news@miakinen.net> - 2025-01-11 16:06 +0100
Re: Précision sur le C kurtz le pirate <kurtzlepirate@free.fr> - 2025-01-11 16:52 +0100
Re: Précision sur le C Olivier Miakinen <om+news@miakinen.net> - 2025-01-11 20:17 +0100
Re: Précision sur le C kurtz le pirate <kurtzlepirate@free.fr> - 2025-01-12 16:31 +0100
Re: Précision sur le C Olivier Miakinen <om+news@miakinen.net> - 2025-01-12 22:26 +0100
Re: Précision sur le C pehache <pehache.7@gmail.com> - 2025-01-16 14:09 +0000
| From | kurtz le pirate <kurtzlepirate@free.fr> |
|---|---|
| Date | 2025-01-09 19:34 +0100 |
| Subject | Précision sur le C |
| Message-ID | <vlp4rh$ouj$1@rasp.pasdenom.info> |
Hello,
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.
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 ?
Je suis un peu perdu :(
--
kurtz le pirate
compagnie de la banquise
[toc] | [next] | [standalone]
| From | Joseph B <joseph@nowhere.invalid> |
|---|---|
| Date | 2025-01-09 20:06 +0000 |
| Message-ID | <vlpa7p$3h1bv$1@dont-email.me> |
| In reply to | #2705 |
kurtz le pirate, le jeudi 9 janvier 2025, a écrit dans messsage <vlp4rh$ouj$1@rasp.pasdenom.info> : > 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 ? > Bonjour, pour ce que je crois comprendre, l'* transforme le paramètre *row en pointeur dynamique vers la valeur (qui doit être un integer) de l'adresse des "row" dans la plage scannée de 0 à SIZE idem pour *col le résultat des deux fournit l'adresse, à l'intersection des numéros de la ligne et la colonne ainsi définis, de la cellule dont le contenu va être évalué. Ici on aurait à faire à une matrice carrée, sauf erreur de ma part ? -- / josephB \
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2025-01-11 16:06 +0100 |
| Message-ID | <vlu1e7$t5s$1@cabale.usenet-fr.net> |
| In reply to | #2705 |
Le 09/01/2025 19:34, kurtz le pirate a écrit :
>
>
> Hello,
>
> 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.
>
> Pour les paramètres, on passe un pointeur sur les variables row et col
> connues en dehors de cette fonction.
Oui. L'appel pourra être du genre :
if (find_empty(board, &row, &col)) {
// on sait que board[row][col] est vide
} else {
// il n'y a aucune case vide
}
> 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 ?
C'est ça. Elles sont mises à zéro, puis incrémentées dans les boucles.
En outre, si la fonction retourne 0, alors tu peux être sûr que row et
col ont été positionnées à la valeur SIZE. Je veux dire bien sûr les
row et col de mon exemple d'appel. D'ailleurs pour ma part j'aurais
écrit *prow et *pcol au lieu de *row et *col dans la définition de la
fonction : c'est complètement équivalent, mais pour moi ça rend plus
évident le fait qu'il s'agit de pointeurs.
--
Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | kurtz le pirate <kurtzlepirate@free.fr> |
|---|---|
| Date | 2025-01-11 16:52 +0100 |
| Message-ID | <678293b6$0$12944$426a74cc@news.free.fr> |
| In reply to | #2707 |
On 11/01/2025 16:06, Olivier Miakinen wrote: > C'est ça. Elles sont mises à zéro, puis incrémentées dans les boucles. > > En outre, si la fonction retourne 0, alors tu peux être sûr que row et > col ont été positionnées à la valeur SIZE. Je veux dire bien sûr les > row et col de mon exemple d'appel. D'ailleurs pour ma part j'aurais > écrit *prow et *pcol au lieu de *row et *col dans la définition de la > fonction : c'est complètement équivalent, mais pour moi ça rend plus > évident le fait qu'il s'agit de pointeurs. C'est aussi ce que j'ai compris et confirmé par quelques tests sans contexte. -- kurtz le pirate compagnie de la banquise
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2025-01-11 20:17 +0100 |
| Message-ID | <vlug4f$1aq5$1@cabale.usenet-fr.net> |
| In reply to | #2708 |
Le 11/01/2025 16:52, kurtz le pirate a écrit : > On 11/01/2025 16:06, Olivier Miakinen wrote: >> C'est ça. Elles sont mises à zéro, puis incrémentées dans les boucles. >> >> En outre, si la fonction retourne 0, alors tu peux être sûr que row et >> col ont été positionnées à la valeur SIZE. Je veux dire bien sûr les >> row et col de mon exemple d'appel. D'ailleurs pour ma part j'aurais >> écrit *prow et *pcol au lieu de *row et *col dans la définition de la >> fonction : c'est complètement équivalent, mais pour moi ça rend plus >> évident le fait qu'il s'agit de pointeurs. > > C'est aussi ce que j'ai compris et confirmé par quelques tests sans > contexte. Note par ailleurs que ta question aurait été *beaucoup* plus en charte sur fr.comp.lang.c que sur fr.comp.sys.mac.programmation. C'est même là que je croyais être lorsque je l'ai lue et que j'y ai répondu, tellement ça me semblait évident. -- Olivier Miakinen
[toc] | [prev] | [next] | [standalone]
| From | kurtz le pirate <kurtzlepirate@free.fr> |
|---|---|
| Date | 2025-01-12 16:31 +0100 |
| Message-ID | <6783e06c$0$5197$426a74cc@news.free.fr> |
| In reply to | #2709 |
On 11/01/2025 20:17, Olivier Miakinen wrote: > Note par ailleurs que ta question aurait été*beaucoup* plus en charte > sur fr.comp.lang.c que sur fr.comp.sys.mac.programmation. C'est même > là que je croyais être lorsque je l'ai lue et que j'y ai répondu, > tellement ça me semblait évident. oui bien sur, mais mes 'fr.comp.lang.c' sont vides aussi bien sur free que sur pasdenom. je vais essayer d'y poster un message. -- kurtz le pirate compagnie de la banquise
[toc] | [prev] | [next] | [standalone]
| From | Olivier Miakinen <om+news@miakinen.net> |
|---|---|
| Date | 2025-01-12 22:26 +0100 |
| Message-ID | <vm1c22$9ck$1@cabale.usenet-fr.net> |
| In reply to | #2705 |
[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
[toc] | [prev] | [next] | [standalone]
| From | pehache <pehache.7@gmail.com> |
|---|---|
| Date | 2025-01-16 14:09 +0000 |
| Message-ID | <W656XKTQ5273KUNFP9YVtk3PI_8@jntp> |
| In reply to | #2705 |
(fu2 fclc)
Le 09/01/2025 à 19:34, kurtz le pirate a écrit :
>
>
> Hello,
>
> 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.
>
> 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 ?
>
>
> Je suis un peu perdu :(
row est un pointeur, donc l'adresse d'un emplacement mémoire. *row
désigne le contenu de l'emplacement mémoire qui est à l'adresse row.
En C, le seul moyen de renvoyer un résultat dans les paramètres est de
passer un pointeur.
[toc] | [prev] | [standalone]
Back to top | Article view | fr.comp.sys.mac.programmation
csiph-web