这段代码:
int p = 10;
void *q;
*q = 10;
Run Code Online (Sandbox Code Playgroud)
不编译:
'=':无法从'int'转换为'void*'
但是,此代码编译良好:
int p = 10;
void *q;
q = &p;
Run Code Online (Sandbox Code Playgroud)
它背后的原因是什么?
甲void *指向未知类型的数据(如果它被初始化,这是你不).
您只能分配已知类型的变量,或通过已知类型的指针.
int p = 10;
void *q = &p;
*(int *)q = 20;
if (p != 20)
...something has gone horribly wrong...
Run Code Online (Sandbox Code Playgroud)
这将转换void *为a int *然后为该解除引用的整数指针赋值.