指针互换的指针

2 c pointers

转换int pointervoid pointer然后返回是否安全int pointer

main()
{
    ...
    int *a = malloc(sizeof(int));
    ...
    *a=10;
    func(a);
    ...
}

void func(void *v)
{
    int x=*(int *)v;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是在函数中返回整数值的有效方法吗?

pmg*_*pmg 6

是的,这是安全的.标准是这样说的(6.3.2.3/1)

指向void的指针可以转换为指向任何不完整或对象类型的指针.指向任何不完整或对象类型的指针可能会转换为指向void的指针并再次返回; 结果应该等于原始指针.


Jam*_*lis 5

它是"安全的",因为int => void => int转换产生的指针将与原始指针相同.

它不是"安全的",因为它很容易出错并且你必须要小心(也就是说,这种类型的代码在C中经常是必需的,因为void*它通常被用作泛化的一种形式).