void*与void**&

void*与void**&

这是在之前的cuda代码里面看到的,就上网查了一下相关的知识点。

(void**)&p 常常是在调用某些函数,作为入口参数的时候会用到。

void*是无类型的指针,或者说指向空类型,或者不指向确定的类型。

void* 指针不指向任何的数据类型,它属于一种未确定类型的过渡型数据,因此如果要访问实际存在的数据,必要将void*指针强转化为指定一个确定的数据类型的数据。

比如之前在cuda代码里面见到的随机数的产生

void* big_random_block( int size ) { 
    unsigned char *data = (unsigned char*)malloc( size );
    HANDLE_NULL( data );
    for (int i=0; i<size; i++)
        data[i] = rand();

    return data;
}

最初看这个代码的时候以为是有问题的,因为感觉void就是没有返回值啊,怎么还有返回值。

然后调用的时候是这样的

unsigned char *buffer = (unsigned char*)big_random_block( SIZE );

其实也可以用下面的调用


unsigned int *buffer = (unsigned int*)big_random_block( SIZE );

可以看到这样做的好处是对于任何类型的调用,无需要考虑原类型,这样就灵活了很多。

(void**)&变量 就是把变量的地址强制转化为无类型指针的指针,也是为了对于任何类型的调用,不需要考虑原类型。

可以打印一下就知道其中的差异了。

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦