Ich möchte einen einzelnen Zeiger pt
und einen Offset size_t offp
verwenden, um den Wert von myNFO.valueA
oder myNFO.valueB
abhängig von Laufzeitbedingungen zu aktualisieren.In C: Wie zeigt man zur Laufzeit auf verschiedene Elemente mit Offset?
kann ich pt
-&myNFO
gesetzt, aber ich weiß nicht, die richtige Art von pt
und wie soll ich offp
berechnen.
Edited:
ich vergessen, die Strukturen zu erwähnen, ich verwendet werden zur Laufzeit zugeordnet.
Ich verwende khash, die unterscheiden müssen, ob ein Schlüssel existiert. Wenn ich
pt = &pNFO->valueA;
verwende, muss ich ähnliche Codes zweimal schreiben. Also möchte ich zuerst bestimmen, welches Mitglied und dann zum Hash-Code wechseln.
typedef struct {
uint16_t valueA;
uint16_t valueB;
const char * fileName;
} __attribute__ ((__packed__)) Info_t;
Info_t myNFO, *pNFO;
pNFO = calloc(1,sizeof(Info_t));
size_t offp = &(myNFO.valueB) - &(myNFO.valueA);
if (ret==1) {
pt = pNFO;
} else {
pt = pNFO + offp;
}
*pt = 100;
Der Compiler erledigt das für Sie, wenn Sie 'myNFO.valueB' schreiben. Wenn Sie über einen Zeiger auf ein Element zugreifen wollen, können Sie 'pNFO-> valueB' verwenden. Der Compiler führt die gleiche Offset-Berechnung durch. – Tim
Warum nicht nur 'uint16_t * pt = ret == 1? & pNFO-> valueA: & pNFO-> valueB; '? – melpomene
Warum verwenden Sie nicht 'offsetof()'? – Barmar