我有一种情况,其中void指针内的地址被复制到另一个指针。在没有类型转换的情况下执行此操作不会发出警告或错误。伪代码看起来像
structA A;
void * p = &A;
structA * B = p;// Would like to conform this step
我没有预见到这方面的任何问题。 但由于这个操作在很多地方使用,我想确定它是否可以有任何复制。还有编译器依赖吗?
答案 0 :(得分:5)
不,这很好,100%标准。
void *
可以毫无问题地与任何其他数据/对象指针进行转换。
请注意,数据/对象限制:函数指针不转换为void *
。
这就是you shouldn't cast the return value of malloc()
返回void *
。
答案 1 :(得分:1)
在C中,void *
与任何指针隐式兼容。这就是为什么你不需要施放时,例如将任何类型的指针传递给接受void *
参数的函数,或者从返回void *
的函数(此处为malloc
分配指针(仍然是任何类型)时)是一个很好的例子。