Position eines Elementes einer Struktur herausfinden

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Position eines Elementes einer Struktur herausfinden

Beitrag von Xin » Mo Apr 16, 2012 5:08 pm

Ich überlege zur Zeit an folgendem Problem. Entweder sehe ich den Wald vor lauter Bäumen nicht, oder ich habe ein Problem. ^^
Man nehme eine Beispielstruktur:

Code: Alles auswählen

class Example
{
  int a;
  int b;
};
Ich möchte jetzt wissen, wo sich b im Speicher befindet, wenn ich mit new eine Instanz der Klasse erstelle.

Wenn ich eine Instanz anlege, so liegt die Instanz beispielsweise bei 0x1000, damit liegt Instanz->a bei Adresse 0x1000 und Instanz->b bei 0x1004. So könnte ich jetzt herausfinden, dass a 0 Bytes nach Beginn der Struktur liegt, und b 4 Bytes nach Beginn der Struktur.

Und jetzt die Frage, die das Ganze für mich interessant macht: Wie finde ich das raus, ohne eine Instanz anzulegen!?
Ich bräuchte also etwas wie offsetof( Example::a ).
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: Position eines Elementes einer Struktur herausfinden

Beitrag von fat-lobyte » Mo Apr 16, 2012 5:34 pm

Ähm... Sollte das nicht mit offsetof(Example, a) funktionieren?

Code: Alles auswählen

#include <iostream>
#include <cstddef>

struct Example
{
    int a;
    int b;
};


int main()
{
    std::cout<<"Offset of a in Example: "<<offsetof(Example, a)<<'\n';
    return 0;
}
Kompiliert problemlos. Wenns ein "class" wäre, dann kommt "Fehler: »int Example::a« ist privat in diesem Zusammenhang", was auch Sinn macht, denn du hast nicht die Adresse eines Privaten Members zu nehmen.
Haters gonna hate, potatoes gonna potate.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Position eines Elementes einer Struktur herausfinden

Beitrag von Xin » Mo Apr 16, 2012 7:30 pm

Ja, das sollte so funktionieren.
Ich hatte nur keine Ahnung, dass es ein offsetof gibt. ^^

Ich habe vorher mit posof() und positionof() gespielt (siehe Threadtitel) - aber ohne Erfolg. Und dann beim schreiben den Text von posof() auf offsetof() geändert. Ich fand einfach nur, dass das ein echt guter Name für eine solche Funktionalität ist... andere offenbar auch....

Gnarf

Danke :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten