Hallo
Ich habe einen generierten Text in einem Array. Nun möchte ich mit einer Variable (oder Pointer) auf die Variable verweisen, deren Name dem Text in meinem Array entspricht.
geht das?
Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge
ich habs nicht ganz verstanden ...
kannst du's nochmal anders erklären ?
ich habe folgendes problem:
ich habe mehrere variablen mit daten (daten0, daten1, daten2, daten3 etc.)
diese variablen möchte ich in einer funktion verarbeiten. ich habe nun eine ziffer (z.B. 2). in der variable varname verbinde ich nun das wort "daten" und die ziffer 2 (varname hat nun den inhalt "daten2").
da ich in meiner funktion nun den inhalt von der variable daten2 brauche, muss ich mit hilfe des textes "daten2" in varname auf den inhalt von der variable daten2 kommen
mit einem array kann ich dieses problem nicht lösen, da die erstellung des arrays einiges an aufwand fordern würde.
ich hoffe, ich habe mein problem einigermassen verständlich geschildert!
Die variablennamen sind nach dem kompilieren bestenfalls noch als debug information vorhanden. Eine lösung wäre das eigenhändige abspeichern der beziehung "name"->adresse in einem array.
So in der art:
typedef struct {
char *name;
void *addr;
} NameAdrRel;
int daten0, daten1, daten2, daten3, daten4, daten5;
NameAdrRel nar[]={
{"daten0", &daten0},
{"daten1", &daten1},
{"daten2", &daten2},
{"daten3", &daten3},
{"daten4", &daten4},
{"daten5", &daten5},
{NULL, NULL}//hier das ende oder mit sizeof(nar)/sizeof(NameAdrRel) die anzahl berechnen
};
Die einzelnen einträge können auch von einem macro erzeugt werden, wo der variablenname nur einmal angegeben werden muss.
#define NAR(x) {#x, &x}
Damit wird ein eintrag zu
NameAdrRel nar[]={
NAR(daten0),
NAR(daten1),
NAR(daten2),
NAR(daten3),
NAR(daten4),
NAR(daten5),
{NULL, NULL}
};
Habe es aber nicht probiert, kann also auch etwas anders lauten und evtl. nur mit einem c++ preprozessor laufen.
Die auswertung selbst läuft dann durch textvergleich und typecasting der adresse. Ein vorsortieren zur laufzeit und suche mit intervallschachtelung sollte für das tempo sorgen.
mr.escape