Pourquoi pour declarer 2 pointeurs... [C] - C++ - Programmation
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
En Pascal c'est le contraire.
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
2-L'étoile * se rapporte à ce qui suit donc au "a" si tu en mets qu'une...
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
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 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*...
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 ?
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...
comme dit jodalton : c'est comme ça...
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;
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 !
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....
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)
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...
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....
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.... |
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
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 |
bof c'est pas pire que:
if( a=b );
fais_un_truc_qui_arriveras_tout_le_temps();
(fo trouver le double truc pourri dans le code )
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;
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....
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(); (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
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(); (fo trouver le double truc pourri dans le code ) |
parle pas de malheur ca m'est arrive aujourd'hui
saloperie de c
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 |
c'est clair c un grand classique le deuxième, tu passer un après-midi à débugguer un truc avant de le voir
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
Marsh Posté le 23-05-2002 à 14:47:51
ont doit ecrire :
Node *a, *b;
et pas
Node* a,b;