Проблема проста. Насколько я понимаю, GCC утверждает, что символы будут выровнены по байтам и ints с 4 байтами в 32-битной среде. Мне также известно о стандарте C99 6.3.2.3, в котором говорится, что отливка между несогласованными типами указателей приводит к операциям undefined. Что говорят об этом другие стандарты C? Здесь также много опытных кодеров - любой взгляд на это будет оценен.
int *iptr1, *iptr2;
char *cptr1, *cptr2;
iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;