作为C的新手,我很困惑何时投射指针实际上是好的.
据我所知,你几乎可以将任何指针类型转换为任何其他类型,编译器将允许你这样做.例如:
int a = 5;
int* intPtr = &a;
char* charPtr = (char*) intPtr;
Run Code Online (Sandbox Code Playgroud)
但是,通常这会调用未定义的行为(尽管它恰好在许多平台上运行).这说,似乎有一些例外:
void*自由地投射(?)char*自由地投射(?)(至少我在代码中看过它...).
那么指针类型之间的哪些转换在C 中不是未定义的行为?
编辑:
我试着研究C标准("6.3.2.3指针"一节,见http://c0x.coding-guidelines.com/6.3.2.3.html),但除了一点点之外,我并没有真正理解它void*.
EDIT2:
只是为了澄清:我明确地只询问"正常"指针,即不是关于函数指针.我意识到强制转换函数指针的规则是非常严格的.事实上,我已经问过:-):如果我转换函数指针,改变参数个数会发生什么