将int pointer
转换为void pointer
然后再转换回int pointer
是否安全
main()
{
...
int *a = malloc(sizeof(int));
...
*a=10;
func(a);
...
}
void func(void *v)
{
int x=*(int *)v;
...
}
这是在函数中取回整数值的有效方法吗?
发布于 2010-10-01 20:25:17
是的,它是安全的。标准这么说(6.3.2.3/1)
指向空的指针可以转换为任何不完整或对象类型的指针,也可以从该指针转换为任何不完整或对象类型。指向任何不完整或对象类型的指针可以转换为空指针,然后再转换回来;结果应与原始指针相等。
发布于 2010-10-01 20:18:09
它是“安全的”,因为由int => void => int转换产生的指针将与原始指针相同。
它并不“安全”,因为它很容易出错,而且您必须小心(也就是说,这种类型的代码在C中通常是必需的,因为void*
通常用作泛化的一种形式)。
https://stackoverflow.com/questions/3842757
复制相似问题