假设你从一个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*之前,是否需要在转换之前的某处取消引用?
您显示的转换在语法上是有效的C. void *在路上通过类型转换int *没有任何区别.
它是否在语义上是正确的取决于指向的内存是否(char *)p + 6正确大小并对齐以进行访问int.
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |