Как новичок в C, я смущен, когда наведение указателя на самом деле нормально.
Как я понимаю, вы можете использовать любой тип указателя для любого другого типа, и компилятор позволит вам это сделать. Например:
int a = 5;
int* intPtr = &a;
char* charPtr = (char*) intPtr;
Однако, как правило, это вызывает поведение undefined (хотя оно работает на многих платформах). При этом, по-видимому, есть некоторые исключения:
- вы можете свободно нажимать на и из
void*
(?) - вы можете свободно нажимать на и из
char*
(?)
(по крайней мере, я видел его в коде...).
Итак, каковы между типами указателей не undefined поведение в C?
Edit:
Я попытался изучить стандарт C (раздел "6.3.2.3 Указатели", http://c0x.coding-guidelines.com/6.3.2.3.html), но на самом деле понять это, кроме бит о void*
.
Edit2:
Просто для пояснения: я явно спрашиваю только о "нормальных" указателях, т.е. не о указателях функций. Я понимаю, что правила для указателей функций каста очень ограничены. Насколько я помню, я уже спрашивал об этом:-): Что произойдет, если я нарисую указатель на функцию, изменив количество параметров