"La valeur d'un tableau est un pointeur vers son premier élément".
(valeur dans le sens rvalue. D'ailleurs ce mot peut-il avoir un autre
sens ?)
On entend souvent des formulations plus ou moins diverses et compliquées
sur cette conversion tableau-pointeur, ce qui fait qu'on a du mal à s'y
retrouver.
On parle par exemple du nom du tableau (alors que si p pointe vers un
tableau, il me semble que *p est également concerné par cette
conversion), ou d'exception sur certains opérateur (& et sizeof, ce qui
n'est pas faux, mais dont la cause semble être le fait que derrière ces
opérateurs, une lvalue n'est pas convertie en rvalue).
Ma question est simple : cette phrase est-elle vraie ?
Aurais-tu un exemple d'identificateurs différents d'un même objet ?
/* toto.c */ extern int tab[64];
/* tutu.c */ extern int tab[64];
En quoi les identificateurs sont-ils différents ?
static int tab[64];
int f() { extern int tab[64]; /*...*/ }
ditto...
-- A+
Emmanuel Delahaye
Emmanuel Delahaye
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL. Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur indéterminée pointe sur une adresse ou NULL. Si elle est non NULL, personne ne sait dire si elle est valide ou non.
-- A+
Emmanuel Delahaye
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un
pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur
indéterminée pointe sur une adresse ou NULL. Si elle est non NULL,
personne ne sait dire si elle est valide ou non.
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL. Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur indéterminée pointe sur une adresse ou NULL. Si elle est non NULL, personne ne sait dire si elle est valide ou non.
-- A+
Emmanuel Delahaye
Jean-Marc Bourguet
Emmanuel Delahaye writes:
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p); **p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa signification pour moi la plus impropre. Le mecanisme linguistique est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le qualifie donc avec type ou valeur quand on veut etre sur de ne pas etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers, un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure de style consciente, pour designer les objets -- variables ou non -- de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures -- on a la complication supplementaire qu'il s'agit d'une famille de types. Mais comme pour la difference type/valeur, c'est tres rarement ambigu et etre plus precis serait tres lourd.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p);
**p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas
nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa
signification pour moi la plus impropre. Le mecanisme linguistique
est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le
qualifie donc avec type ou valeur quand on veut etre sur de ne pas
etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers,
un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure
de style consciente, pour designer les objets -- variables ou non --
de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures --
on a la complication supplementaire qu'il s'agit d'une famille de
types. Mais comme pour la difference type/valeur, c'est tres rarement
ambigu et etre plus precis serait tres lourd.
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p); **p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa signification pour moi la plus impropre. Le mecanisme linguistique est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le qualifie donc avec type ou valeur quand on veut etre sur de ne pas etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers, un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure de style consciente, pour designer les objets -- variables ou non -- de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures -- on a la complication supplementaire qu'il s'agit d'une famille de types. Mais comme pour la difference type/valeur, c'est tres rarement ambigu et etre plus precis serait tres lourd.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Emmanuel Delahaye
Mais &a n'est-il un pointeur ? 1 est il un int ?
C'est une bonne formulation d'une question. 1 est un entier, mais déjà tout nombre est une abstraction, une abstraction est-elle un objet ? Qu'est-ce qu'un objet ?
Vu du C, un objet a une adresse. 1 n'a pas d'adresse. C'est une expression constante de type int. Ça peut aussi être la valeur d'un objet de type int ou compatible.
-- A+
Emmanuel Delahaye
Mais &a n'est-il un pointeur ?
1 est il un int ?
C'est une bonne formulation d'une question.
1 est un entier, mais déjà tout nombre est une abstraction, une
abstraction est-elle un objet ?
Qu'est-ce qu'un objet ?
Vu du C, un objet a une adresse. 1 n'a pas d'adresse. C'est une
expression constante de type int. Ça peut aussi être la valeur d'un
objet de type int ou compatible.
C'est une bonne formulation d'une question. 1 est un entier, mais déjà tout nombre est une abstraction, une abstraction est-elle un objet ? Qu'est-ce qu'un objet ?
Vu du C, un objet a une adresse. 1 n'a pas d'adresse. C'est une expression constante de type int. Ça peut aussi être la valeur d'un objet de type int ou compatible.
-- A+
Emmanuel Delahaye
Jean-Marc Bourguet
Jean-Marc Bourguet writes:
Emmanuel Delahaye writes:
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p); **p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa signification pour moi la plus impropre. Le mecanisme linguistique est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le qualifie donc avec type ou valeur quand on veut etre sur de ne pas etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers, un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure de style consciente, pour designer les objets -- variables ou non -- de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures -- on a la complication supplementaire qu'il s'agit d'une famille de types. Mais comme pour la difference type/valeur, c'est tres rarement ambigu et etre plus precis serait tres lourd.
Petit complement, tu appelles (avec la norme d'ailleurs) adresse les valeurs de type pointeurs. C'est un choix malheureux de nom car le terme est designe une notion bien fixee en hard, et les pointeurs ne correspondent pas necessairement a une adresse. On peut imaginer sans probleme (et je me demande si gcc n'a pas eu un tel mode) un compilateur qui presente les pointeurs par 2 addresses: celle de debut de la zone meme, celle de fin et un offset dans la zone. Le code genere permettrait de verifier que le code respecte bien les conditions fixees sur l'arithmetique des pointeurs.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc Bourguet <jm@bourguet.org> writes:
Emmanuel Delahaye <emdel@YOURBRAnoos.fr> writes:
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p);
**p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas
nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa
signification pour moi la plus impropre. Le mecanisme linguistique
est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le
qualifie donc avec type ou valeur quand on veut etre sur de ne pas
etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers,
un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure
de style consciente, pour designer les objets -- variables ou non --
de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures --
on a la complication supplementaire qu'il s'agit d'une famille de
types. Mais comme pour la difference type/valeur, c'est tres rarement
ambigu et etre plus precis serait tres lourd.
Petit complement, tu appelles (avec la norme d'ailleurs) adresse les
valeurs de type pointeurs. C'est un choix malheureux de nom car le
terme est designe une notion bien fixee en hard, et les pointeurs ne
correspondent pas necessairement a une adresse. On peut imaginer sans
probleme (et je me demande si gcc n'a pas eu un tel mode) un
compilateur qui presente les pointeurs par 2 addresses: celle de debut
de la zone meme, celle de fin et un offset dans la zone. Le code
genere permettrait de verifier que le code respecte bien les
conditions fixees sur l'arithmetique des pointeurs.
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
int **p = malloc(sizeof *p); **p = NULL;
*p n'est donc pas un pointeur pour toi (c'est un objet qui n'est pas nomme, donc ce n'est pas une variable).
Ca me semble etrange que tu restreignes le mot pointeur a sa signification pour moi la plus impropre. Le mecanisme linguistique est le meme pour tous les types.
Le nom designe a la fois le type et les valeurs de ce type (et on le qualifie donc avec type ou valeur quand on veut etre sur de ne pas etre ambigu, mais le contexte ou un jeu sur le nombre -- les entiers, un entier -- permet generalement de faire la difference).
On utilise aussi le meme nom, mais la ca releve chez moi de la figure de style consciente, pour designer les objets -- variables ou non -- de ce type.
Dans le cas des pointeurs -- comme des tableaux ou des structures -- on a la complication supplementaire qu'il s'agit d'une famille de types. Mais comme pour la difference type/valeur, c'est tres rarement ambigu et etre plus precis serait tres lourd.
Petit complement, tu appelles (avec la norme d'ailleurs) adresse les valeurs de type pointeurs. C'est un choix malheureux de nom car le terme est designe une notion bien fixee en hard, et les pointeurs ne correspondent pas necessairement a une adresse. On peut imaginer sans probleme (et je me demande si gcc n'a pas eu un tel mode) un compilateur qui presente les pointeurs par 2 addresses: celle de debut de la zone meme, celle de fin et un offset dans la zone. Le code genere permettrait de verifier que le code respecte bien les conditions fixees sur l'arithmetique des pointeurs.
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Pierre Maurette
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL. Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur indéterminée pointe sur une adresse ou NULL. Si elle est non NULL, personne ne sait dire si elle est valide ou non. Donc tu définis bien une adresse comme "le contenu éventuellement
indéfini d'un pointeur ;-) ". Avec "Un pointeur est une variable contenant une adresse ou NULL", nous sommes en pleine tautologie. Une belle référence circulaire.
-- Pierre Maurette
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL.
Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un
pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur indéterminée
pointe sur une adresse ou NULL. Si elle est non NULL, personne ne sait dire
si elle est valide ou non.
Donc tu définis bien une adresse comme "le contenu éventuellement
indéfini d'un pointeur ;-) ". Avec "Un pointeur est une variable
contenant une adresse ou NULL", nous sommes en pleine tautologie. Une
belle référence circulaire.
Je comprends. Comme je l'ai dit, pour moi « pointeur » est un type.
Erreur. Un pointeur est une variable contenant une adresse ou NULL. Erreur. Ça, c'est un pointeur initialisé.
Sauf à définir "adresse" comme le contenu éventuellement indéfini d'un pointeur ;-)
J'ai pas dit 'adresse valide'. Un pointeur contenant une valeur indéterminée pointe sur une adresse ou NULL. Si elle est non NULL, personne ne sait dire si elle est valide ou non. Donc tu définis bien une adresse comme "le contenu éventuellement
indéfini d'un pointeur ;-) ". Avec "Un pointeur est une variable contenant une adresse ou NULL", nous sommes en pleine tautologie. Une belle référence circulaire.
-- Pierre Maurette
Harpo
Emmanuel Delahaye wrote:
Un pointeur serait donc un objet auquel on peut affecter une adresse ?
C'est la journée des défonçages de portes ouvertes...
Certes, mais qu'est-ce qu'une adresse ?
-- http://patrick.davalan.free.fr/
Emmanuel Delahaye wrote:
Un pointeur serait donc un objet auquel on peut affecter une adresse
?
C'est la journée des défonçages de portes ouvertes...
C'est une bonne formulation d'une question. 1 est un entier,
C'est aussi un rationnel, un réel, un complexe, et surement un quadrinion aussi.
En C, c'est une expression constante de type int.
Qu'est-ce qu'un objet ?
Une chose avec une adresse sur fclc. Un truc qu'on peut toucher pour ma fille de 4 ans.
1 n'existe tout simplement pas.
La preuve, nous n'en parlons pas ;-)
Marc Boyer -- Si tu peux supporter d'entendre tes paroles Travesties par des gueux pour exciter des sots IF -- Rudyard Kipling (Trad. Paul Éluard)
Harpo
Marc Boyer wrote:
1 n'existe tout simplement pas.
La preuve, nous n'en parlons pas ;-)
C'est clair, 1 n'a pas d'adresse, peut-être qu'il habite chez une copine, je ne sais pas... Mais tant que je ne l'aurais pas vu devant moi, je douterai de son existence, la facilité que nous avons à abstraire nous fait croire à l'existence d'une réalité sous-jacente, mais aussi loin que nous puissions creuser nous ne pouvons trouver de soubassement à cette impression, 1 (et tout ce qui s'ensuit) ne peut être affublé d'une existence intrinsèque que parce que nous la lui accordons, or cela veut justement dire que cette existence ne lui est pas intrinsèque.
That's all in the mind, you know ?
-- http://patrick.davalan.free.fr/
Marc Boyer wrote:
1 n'existe tout simplement pas.
La preuve, nous n'en parlons pas ;-)
C'est clair, 1 n'a pas d'adresse, peut-être qu'il habite chez une
copine, je ne sais pas...
Mais tant que je ne l'aurais pas vu devant moi, je douterai de son
existence, la facilité que nous avons à abstraire nous fait croire à
l'existence d'une réalité sous-jacente, mais aussi loin que nous
puissions creuser nous ne pouvons trouver de soubassement à cette
impression, 1 (et tout ce qui s'ensuit) ne peut être affublé d'une
existence intrinsèque que parce que nous la lui accordons, or cela veut
justement dire que cette existence ne lui est pas intrinsèque.
C'est clair, 1 n'a pas d'adresse, peut-être qu'il habite chez une copine, je ne sais pas... Mais tant que je ne l'aurais pas vu devant moi, je douterai de son existence, la facilité que nous avons à abstraire nous fait croire à l'existence d'une réalité sous-jacente, mais aussi loin que nous puissions creuser nous ne pouvons trouver de soubassement à cette impression, 1 (et tout ce qui s'ensuit) ne peut être affublé d'une existence intrinsèque que parce que nous la lui accordons, or cela veut justement dire que cette existence ne lui est pas intrinsèque.