相关疑难解决方法(0)

何时在指针类型之间进行转换而不是C中未定义的行为?

作为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:

只是为了澄清:我明确地只询问"正常"指针,即不是关于函数指针.我意识到强制转换函数指针的规则是非常严格的.事实上,我已经问过:-):如果我转换函数指针,改变参数个数会发生什么

c casting undefined-behavior

32
推荐指数
3
解决办法
7209
查看次数

标签 统计

c ×1

casting ×1

undefined-behavior ×1