OVH Cloud OVH Cloud

De la pertinence d'une phrase

67 réponses
Avatar
Yoxoman
"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 ?

--
"Yo!"
Martin Heidegger (trad. Terrence Malick)

10 réponses

3 4 5 6 7
Avatar
Emmanuel Delahaye
Un pointeur serait donc un objet auquel on peut affecter une adresse ?


C'est la journée des défonçages de portes ouvertes...

http://mapage.noos.fr/emdel/notes.htm#pointeurs

--
A+

Emmanuel Delahaye

Avatar
Emmanuel Delahaye
En news:, Yoxoman va escriure:
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


Avatar
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



Avatar
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


Avatar
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



Avatar
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



Avatar
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




Avatar
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/


Avatar
Marc Boyer
Le 31-03-2006, Harpo a écrit :
Marc Boyer wrote:


Mais &a n'est-il un pointeur ?


1 est il un int ?


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)



Avatar
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/


3 4 5 6 7