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