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