Article View: maus.lang.c
Article #12pointer type cast in mehreren Schritten
From: Friedhelm Waitzmann
Date: Sat, 08 Mar 1997 00:00
Date: Sat, 08 Mar 1997 00:00
69 lines
2386 bytes
2386 bytes
Hallo C-Experten,
Mein Problem ist folgendes:
Gegeben sei ein structure
typedef struct
{
item_type item;
another_type item2;
} struct_type;
und eine Zeigervariable
struct_type *p;
die so initialisiert ist, dass sie auf ein Objekt vom Typ
struct_type zeigt.
Weil item die erste Komponente von struct_type ist, gilt ja
offsetof(struct_type,item) == 0
bzw. (void *)p und (void *)&p->item zeigen auf denselben
Speicherbereich: auf das erste byte von item.
Auszerdem gilt: Der Zeiger auf ein structure, type-casted
auf den Zeigertyp auf die erste Struct-Komponente, ergibt
einen Zeiger auf die erste Komponente:
(item_type *)p zeigt auf p->item.
Folglich gilt: (void *)(item_type *)p und (void *)p zeigen
auf denselben Speicherplatz. Das heisst jedoch nicht
unbedingt, dass (void *)(item_type *)p und (void *)p
dieselbe Bitmusterdarstellung besitzen.
Folgende Type-cast-Ketten liefern den Zeiger unveraendert
zurueck, weil
(1) type-cast in einen Zeiger auf einen weniger streng
ausgerichteten Datentyp und zurueck den
Zeigerwert unveraendert zurueckliefert und
(2) type-cast in (void *) und zurueck den Zeigerwert
ebenfalls unveraendert zurueckliefert.
Also:
(a): (item_type *)(void*)(item_type *)p
ist identisch zu (item_type *)p nach Regel (2)
(b): (struct_type *)(item_type *)(void *)(item_type *)p
ist identisch zu p wegen (a) und (1).
(c): (struct_type *)(void *)p ist identisch zu p nach
Regel (2).
Und jetzt kommen endlich meine Fragen:
Zeigt (struct_type *)(void *)(item_type *)p auf das
Objekt, worauf p zeigt, oder ist das nicht definiert?
Zeigt (struct_type *)(item_type *)(void *)p auf das
Objekt, worauf p zeigt, oder ist das nicht definiert?
Vielen Dank im Voraus,
Friedhelm.
Technical Details
Message-ID:
<5fqs3g$5t5@zdi.informatik.uni-stuttgart.de>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: GERMAN,ASCII-7-bit X-Google-Thread: 144b12,f3bad4f956293641,start X-Google-Attributes: gid144b12,public X-Google-Thread: 100a0f,f3bad4f956293641,start X-Google-Attributes: gid100a0f,public From: Friedhelm Waitzmann <Friedhelm.Waitzmann@studbox.uni-stuttgart.de> Subject: pointer type cast in mehreren Schritten Date: 1997/03/08 Message-ID: <5fqs3g$5t5@zdi.informatik.uni-stuttgart.de> X-Deja-AN: 223913337 Organization: Informatik, Uni Stuttgart, Germany Keywords: pointer type cast Newsgroups: maus.lang.c,fido.ger.c_echo