将void指针中的值赋给非void指针

时间:2014-04-02 08:52:39

标签: c pointers

我有一种情况,其中void指针内的地址被复制到另一个指针。在没有类型转换的情况下执行此操作不会发出警告或错误。伪代码看起来像

structA A;
void * p = &A;
structA * B = p;// Would like to conform this step 

我没有预见到这方面的任何问题。 但由于这个操作在很多地方使用,我想确定它是否可以有任何复制。还有编译器依赖吗?

2 个答案:

答案 0 :(得分:5)

不,这很好,100%标准。

void *可以毫无问题地与任何其他数据/对象指针进行转换。

请注意,数据/对象限制:函数指针转换为void *

这就是you shouldn't cast the return value of malloc()返回void *

的原因

答案 1 :(得分:1)

在C中,void *与任何指针隐式兼容。这就是为什么你不需要施放时,例如将任何类型的指针传递给接受void *参数的函数,或者从返回void *的函数(此处为malloc分配指针(仍然是任何类型)时)是一个很好的例子。