[C] Pourquoi pour declarer 2 pointeurs...

Pourquoi pour declarer 2 pointeurs... [C] - C++ - Programmation

Marsh Posté le 23-05-2002 à 14:47:51    

ont doit ecrire :  
 
Node *a, *b;
 
et pas
 
Node*  a,b;
 
 :??:

Reply

Marsh Posté le 23-05-2002 à 14:47:51   

Reply

Marsh Posté le 23-05-2002 à 14:49:09    

ça c'est une question difficile :/
J'en sais rien...  
Et c'est vrai que c'est pas logique :o
En Pascal c'est le contraire.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-05-2002 à 14:49:45    

Bah je suis pas un spécialiste, mais je dirais que :
 
1-C'est comme ça  :p  
2-L'étoile * se rapporte à ce qui suit donc au "a" si tu en mets qu'une...

Reply

Marsh Posté le 23-05-2002 à 14:51:40    

car on declare 2 adresses, et non 2 variables , le compilateur doit donc faire la différence ... donc a coté de chaque pointeur, on assigne le symbole ki fera que le compilateur interpretera une adresse et non une variable :)

Reply

Marsh Posté le 23-05-2002 à 14:52:33    

jodalton a écrit a écrit :

Bah je suis pas un spécialiste, mais je dirais que :
 
1-C'est comme ça  :p  
2-L'étoile * se rapporte à ce qui suit donc au "a" si tu en mets qu'une...  




 
Ouais mais justement tu declares 2 pointeurs et pas 2 nodes donc ca serait plus logique que ca soit des node*...

Reply

Marsh Posté le 23-05-2002 à 14:55:31    

ninja sky a écrit a écrit :

car on declare 2 adresses, et non 2 variables , le compilateur doit donc faire la différence ... donc a coté de chaque pointeur, on assigne le symbole ki fera que le compilateur interpretera une adresse et non une variable :)  




 
ouais mais c debile ce que tu dis pq qd tu declares 2 variables comme ca :
 
type a,b;
 
Le compilateur sait que b est du meme type que a...
 
Et du coup si tu veux deux pointeurs sur type tu fais :
 
(type*) a,b;
 
 
non ?  :??:

Reply

Marsh Posté le 23-05-2002 à 14:59:15    

sincèrement, est ce que le fait de marquer type *a, *b au lieu de type* a,b change qqchose ?
 
franchement, on s'en fout de la syntaxe... à la limite, je préfère comme c'est actuellement, comme ça on voit de suite que a et b sont des pointeurs
 
la syntaxe des pointeurs du C est déja bien assez complexe comme ça, on va pas se prendre la tête pour si peu... :sarcastic:  
 
comme dit jodalton : c'est comme ça...


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-05-2002 à 15:00:19    

oui mais non....
 
je pense que la philosophie initiale était du style
 
type (modifier)a, (modifier)b;
 
car tu peux avoir:
 
type *a,b[60],**c;

Reply

Marsh Posté le 23-05-2002 à 15:01:19    

J'en sais pas plus que tout à l'heure mais je vais qd meme préciser ce que je pensais :
 
Si l'étoile * se rapporte uniquement à ce qui est après, (Node*) n'a pas de sens en soit, il faut écrire Node *a,*b ...
 
Harkonnen > faut se poser des questions des fois, ça peut faire avancer le monde !

Reply

Marsh Posté le 23-05-2002 à 15:10:16    

jodalton a écrit a écrit :

Harkonnen > faut se poser des questions des fois, ça peut faire avancer le monde !  




ouais mais bon, faut pas se prendre la tête non plus sur des trucs qui de toute façon ne changeront pas, que des générations entières de programmeurs ont utilisé et qui a fait ses preuves... et puis, je suppose que Kernighan avait surement une bonne raison de mettre en place la notation actuelle, autant lui demander directement plutot que de se laisser à de vagues suppositions....  :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-05-2002 à 15:10:16   

Reply

Marsh Posté le 23-05-2002 à 15:13:09    

bjone a écrit a écrit :

oui mais non....
 
je pense que la philosophie initiale était du style
 
type (modifier)a, (modifier)b;
 
car tu peux avoir:
 
type *a,b[60],**c;  




 
et ça c'est pas une explication logique ;)
 
on peut très bien faire
 
type yo = wesh *
 
yo a,b
 
et a & b sont des pointeurs sur wesh.
 
et tu peux aussi avoir besoin d'écrire
 
yo a,*b
 
ou tu as un pointeur sur wesh, et un pointeur sur pointeur (un pointeur sur une table de pointeurs malloc-ée qui pointent sur des wesh)

Reply

Marsh Posté le 23-05-2002 à 15:14:02    

bjone a écrit a écrit :

oui mais non....
 
je pense que la philosophie initiale était du style
 
type (modifier)a, (modifier)b;
 
car tu peux avoir:
 
type *a,b[60],**c;  




 
ca ca me plait plus deja comme reponse...
 
mais je vois pas pourquoi ca serait plus logique que l'autre point de vue. Pq ds l'exemple que tu donnes, le compilateur doit reserver 3 emplacements de memoire differents...

Reply

Marsh Posté le 23-05-2002 à 15:15:06    

enfin on peut retomber sur +/- la même chose.
 
c'est de la convention..
c comme les anglais qui roulent à gauche et nous à droite.
chaqun pense que l'autre est débile....

Reply

Marsh Posté le 23-05-2002 à 15:15:59    

Harkonnen a écrit a écrit :

 
ouais mais bon, faut pas se prendre la tête non plus sur des trucs qui de toute façon ne changeront pas, que des générations entières de programmeurs ont utilisé et qui a fait ses preuves... et puis, je suppose que Kernighan avait surement une bonne raison de mettre en place la notation actuelle, autant lui demander directement plutot que de se laisser à de vagues suppositions....  :sarcastic:  




C clair que c'est pas un topic super important et pourtant... si on savait tous pourquoi il faut mettre "Nodes *a,*b" on ferait moins d'erreur sur ce celèbre piège du C  :sarcastic:

Reply

Marsh Posté le 23-05-2002 à 15:19:27    

jodalton a écrit a écrit :

 
C clair que c'est pas un topic super important et pourtant... si on savait tous pourquoi il faut mettre "Nodes *a,*b" on ferait moins d'erreur sur ce celèbre piège du C  :sarcastic:  




 
bof c'est pas pire que:
 
if( a=b );
   fais_un_truc_qui_arriveras_tout_le_temps();
 
:D (fo trouver le double truc pourri dans le code ;) )

Reply

Marsh Posté le 23-05-2002 à 15:20:08    

bjone a écrit a écrit :

 
 
et ça c'est pas une explication logique ;)
 
on peut très bien faire
 
type yo = wesh *
 
yo a,b
 
et a & b sont des pointeurs sur wesh.
 
et tu peux aussi avoir besoin d'écrire
 
yo a,*b
 
ou tu as un pointeur sur wesh, et un pointeur sur pointeur (un pointeur sur une table de pointeurs malloc-ée qui pointent sur des wesh)  




 
mouais :/
 
pour yo a,*b;
 
on peut toujours faire: yo a; yo* b;

Reply

Marsh Posté le 23-05-2002 à 15:22:36    

a ouais mais c'est clair, tu peux toujours retomber sur la même chose.
après c'est l'habitude.
 
enfin je trouve que:
yo *a, *b;
 
est plus lisible que:
yo*   a,b;
 
pour déclarer des pointeurs....
car si par malheur, avec la deuxième convention tu fais:
yo *a,*b;
tu obtiens un pointeur, et un pointeur sur pointeur....

Reply

Marsh Posté le 23-05-2002 à 15:22:44    

bjone a écrit a écrit :

 
 
bof c'est pas pire que:
 
if( a=b );
   fais_un_truc_qui_arriveras_tout_le_temps();
 
:D (fo trouver le double truc pourri dans le code ;) )  




 
arf :)
pour le = ça va, beaucoup de compilateurs te préviennent, mais l'autre est pas facile à voir, j'ai eu le coup y a pas longtemps :sweat:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-05-2002 à 15:23:18    

bjone a écrit a écrit :

 
 
bof c'est pas pire que:
 
if( a=b );
   fais_un_truc_qui_arriveras_tout_le_temps();
 
:D (fo trouver le double truc pourri dans le code ;) )  




 
parle pas de malheur ca m'est arrive aujourd'hui  :(  
 
saloperie de c  :D

Reply

Marsh Posté le 23-05-2002 à 15:24:16    

antp a écrit a écrit :

 
 
arf :)
pour le = ça va, beaucoup de compilateurs te préviennent, mais l'autre est pas facile à voir, j'ai eu le coup y a pas longtemps :sweat:  




 
c'est clair c un grand classique le deuxième, tu passer un après-midi à débugguer un truc avant de le voir :crazy:

Reply

Marsh Posté le 23-05-2002 à 15:26:58    

bjone a écrit a écrit :

a ouais mais c'est clair, tu peux toujours retomber sur la même chose.
après c'est l'habitude.
 
enfin je trouve que:
yo *a, *b;
 
est plus lisible que:
yo*   a,b;
 
pour déclarer des pointeurs....
car si par malheur, avec la deuxième convention tu fais:
yo *a,*b;
tu obtiens un pointeur, et un pointeur sur pointeur....  




 
bah justement moi mon habitude c'est de me dire il me faut un pointeur sur yo donc je declare un yo*
et cette habitude m'a deja cause des soucis qd je veux declarer 2 pointeurs d'un coup mais bon faut s'y faire...
 
et puis c'est juste histoire de patienter pendant que ca compile  :D

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed