🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: maus.lang.c
Article #12

pointer type cast in mehreren Schritten

#12
From: Friedhelm Waitzmann
Date: Sat, 08 Mar 1997 00:00
69 lines
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-mail

Show 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