Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > fr.comp.sys.mac.programmation > #2705 > unrolled thread

Précision sur le C

Started bykurtz le pirate <kurtzlepirate@free.fr>
First post2025-01-09 19:34 +0100
Last post2025-01-16 14:09 +0000
Articles 8 — 4 participants

Back to article view | Back to fr.comp.sys.mac.programmation


Contents

  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

#2705 — Précision sur le C

Fromkurtz le pirate <kurtzlepirate@free.fr>
Date2025-01-09 19:34 +0100
SubjectPré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]


#2706

FromJoseph B <joseph@nowhere.invalid>
Date2025-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]


#2707

FromOlivier Miakinen <om+news@miakinen.net>
Date2025-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]


#2708

Fromkurtz le pirate <kurtzlepirate@free.fr>
Date2025-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]


#2709

FromOlivier Miakinen <om+news@miakinen.net>
Date2025-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]


#2710

Fromkurtz le pirate <kurtzlepirate@free.fr>
Date2025-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]


#2711

FromOlivier Miakinen <om+news@miakinen.net>
Date2025-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]


#2712

Frompehache <pehache.7@gmail.com>
Date2025-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