指向void的指针

博客介绍了万能指针void*,它可接收任何对象类型指针,能相互赋值和比较,可显式转换到其他类型,但做其他操作不安全。其重要用途是向函数传递指针或从函数返回无类型对象,使用时需显式转换,相关函数常用于操作硬件资源的底层系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【万能指针】

一个指向任何对象类型的指针都可以赋值给类型为void*的变量,void*可以赋值给另外一个void *,俩个void *可以比较相等与否,而且可以显式地将void*转换到另一个类型。其他操作都是不安全的,因为编译器并不知道实际被指向的是那种对象。因此,对void*做其他任何操作都将引起编译错误。要使用void * 我们就必须显示地将它转换到某个指向特定类型的指针。例如,

void f(int *pi)
{
    void *pv = pi;//可以:从int * 到 void *的隐式转换。
    *pv; // 错误 void*不能间接引用
    pv ++; //错误 void *不能增量(不知道被指向对象的大小。)
    int *pi2 = static_cast<int *>(pv);//显式转换回int *
    double* pd1 = pv; //错误
    double* pd2 = pi ;//错误
    double* pd3 = static_cast<double *>(pv);//不安全。
}

void * 最重要用途是需要向函数传递一个指针,而又不能对对象的类型做出任何假设。还有就是从函数返回要给无类型的对象。要使用这样的对象,必须通过显式类型转换。

 

采用void*的函数通常存在于系统中很低的层次里,在哪里需要操作某些真实的硬件资源。

void * my_alloc(size_t n);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值