?
c_newbie schrieb:
hätte mal eine frage zu structuren also,
struct a{
char ax;
char bx;
char cx;
};
struct b{
char ax;
int bx;
int cx;
};
könnte es nicht sein dass der compiler struct b so umstellt
dass es am ende so auschaut?
struct b{
int bx;
int cx;
char ax;
};
nee, eher so (wenns eine 32-bit cpu und deshalb 4-aligned ist):
struct b
{
char ax;
/* 3 bytes lücke */
char bx;
/* 3 bytes lücke */
char cx;
/* 3 bytes lücke */
};
^^also schon mit löchern, aber die reihenfolge der members wird nicht verändert.
ich frage das deshalb weil sonst a->ax == b->ax aber
((char *)a)[0] != ((char *)b)[0]
auf structs als char* zuzugreifen geht oft schief. du könntest mit #pragma pack(1) z.b. (compilerabhängig), das alignment abschalten, aber sowas ist doof. wenn du lieber char*-zugriffe machen willst, dann benutze ein char-array statt 'ner struct.