Ich habe einen Zeiger auf eine Struktur, die ich über einen Adressbereich byteweise verschieben möchte. Ich habe einen Ansatz, der funktioniert, aber ist es hässlich in meinen Augen. Leider funktioniert der "nette" Weg nicht. Hier ist ein Mindest Beispiel:Gibt es eine "nette" Möglichkeit, einen Zeiger auf eine Struktur um ein Byte zu erweitern?
#include <stdint.h>
typedef struct {
uint32_t a;
uint32_t b;
} s_t;
int main(int argc, char** argv)
{
uint32_t address = 17;
s_t* ps = (s_t*) address;
// ugly
uint8_t* gna = (uint8_t*) ps;
++gna;
ps = (s_t*) gna;
// nice
++((uint8_t*) ps);
}
Der Compiler meldet einen Fehler auf dem "schönen" Teil:
% gcc test.c -o test.bin
test.c: In function 'main':
test.c:17:5: error: lvalue required as increment operand
++((uint8_t*) ps);
^
ich den Fehler zu verstehen, aber ich dachte an eine uint8_t * Gießen würde einen L-Wert erstellen. Offensichtlich liege ich falsch.
Gibt es eine Möglichkeit, es besser zu machen?
Nicht sicher, was Sie damit zu erreichen versuchen - aber das ist sehr wahrscheinlich Ergebnis in unausgerichtetem Speicherzugriff ... – Aconcagua
Sie haben bereits einen Zeichenzeiger 'gna', warum verwenden Sie ihn nicht wie vorgesehen? Das Inkrementieren eines Strukturzeigers um ein Byte ist bedeutungslos. –