在C中,你是否可以直接从某种指针转换到另一种指针?

Dar*_*lar 2 c pointers

假设你从一个void指针,一个char指针,一个int指针,或者你想要命名的任何东西开始.

    void *p = // initialized to something here
Run Code Online (Sandbox Code Playgroud)

我们做转换就像

    *((int *)((char *)p + 6)) = 5;
Run Code Online (Sandbox Code Playgroud)

这是否意味着我们基本上是一个指向char指针的void指针,做一些算术运算,将它转换为int指针,然后将它取消引用到存储5?

或者我们是否需要将char指针强制转换回void指针,然后才能将其强制转换为int指针?

*另外,在从char*转换为int*之前,是否需要在转换之前的某处取消引用?

caf*_*caf 7

您显示的转换在语法上是有效的C. void *在路上通过类型转换int *没有任何区别.

它是否在语义上是正确的取决于指向的内存是否(char *)p + 6正确大小并对齐以进行访问int.