Seite 1 von 1

Position eines Elementes einer Struktur herausfinden

Verfasst: Mo Apr 16, 2012 5:08 pm
von Xin
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 ).

Re: Position eines Elementes einer Struktur herausfinden

Verfasst: Mo Apr 16, 2012 5:34 pm
von fat-lobyte
Ä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.

Re: Position eines Elementes einer Struktur herausfinden

Verfasst: Mo Apr 16, 2012 7:30 pm
von Xin
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 :-)