C Auf Objekt per Variable zugreifen

tkiela

Hüüüüäääh? :):)
25 August 2007
634
44
Moin moin.

Ich habe eine Struktur mit verschiedenen Inhalten(Höhe,Breite).
Nach diesen Inhalten möchte ich nun sortieren. Das klappt soweit auch alles.

Der Benutzer soll wählen, wonach sortiert wird.
Dementsprechend ist meine Frage, ob man auf ein Object einer Struktur mit einer Variablen zugreifen kann?
Also wenn
var = "Höhe";
Struktur->var;
greift dann auf die Höhe zu.
Natürlich nur beispielhaft.
Ich hoffe, ihr versteht, was ich meine.
 
Das geht so nicht. Die Namen von struct-Membern gehen beim Compilieren verloren.
Du kannst höchstens sowas machen:

!strncmp(var,"Hoehe",5) ? Struktur->hoehe : Struktur->breite

Bis denn,
pco
 
Du musst dir nur merken, welches struct-Member wie lange is. Im Speicher stehen sie ja alle hintereinander. Dann kannst du mittels Variable und Array-Zugriff zugreifen:
PHP:
struct {
  int foo;
  int bar;
} foo;

foo.foo = 42;
foo.bar = 4711;

int* ptr = &foo;
do(ptr[0]); // 42
do(ptr[1]); // 4711
Vorsicht: Dieses Beispiel is natürlich nur so einfach, weil im Struct alle Member dieselbe Länge haben. Kniffliger wirds natürlich, wenn unterschiedliche Typen vorkommen, weil dann n bissle Mathematik notwendig wird.

Ob das n guter Weg is, .... aber in C gehts ;)
 
Richtig, aber deine Aussage hat das Alignment komplett unter den Tisch fallen lassen. Ob Alignment ignoriert werden kann wissen wir nicht, auch sind die dort angegebenen Informationen zum Alignment nur typisches Verhalten, jeder Compiler darf sich also anders verhalten, es ist im C-Standard eben nicht definiert, wie das Verhalten sein soll. Somit würde man sich bei deinem Lösungsansatz auf ein Implementierungsdetail des Compilers verlassen, ein sehr fragiles Vorgehen.

Ich persönlich würde einfach eine Art Reflection-Funktion bauen. Dieser übergibt man das struct, den Namen des Feldes und die Funktion kann dann per switch-case den richtigen Wert auswählen und gibt diesen als void-Pointer zurück. Der Aufrufer kann den void Pointer dann in alles casten, wie es benötigt wird.