C++-指针与void*指针

指针

简单理解,指针代表了两个变量:一个是指针变量本身,另一个是它所指向的变量。对于int *p;这句话可以认为定义了两个变量p和*p,p是一个地址变量,只能存放整型变量在内存中的地址;*p是一个整形变量,只能存放一个整数。

指针与0和void*

没有任何变量会被分配到地址0,所以0就可以作为一个指针常量,与NULL的含义相同,表明指针当时没有指向任何变量,所以令p = 0这个赋值语句是正确的。

指针具有两个属性:地址和长度。地址大小固定,与类型无关;长度则与指针类型相关,这个类型指示编译器怎么解释它所指定内存区域的内容,以及该内存区域应该跨越多少个内存单元。例如,在32位的机器上,int、float和double类型的指针都是4字节的地址,但int类型的指针会指示编译器存取连续的4字节的内存单元作为一个整数,double类型的指针则会指示编译器连续存取8字节的内存单元作为一个双精度浮点数。

因此,指针变量本身存储的仅是一个内存地址,其大小是固定的,而指针类型用于确定如何存取其所指内存区域的数据。故C++提供了一种无类型指针void ,两个void指针可以相互赋值、比较是否相等。

任何类型的指针都是大小相同的地址,而void*指针仅表示与之相关的值是个地址,因此能够接收任何数据类型的指针(除函数指针外)。但是由于void*无法确定其所指内存数据的类型,因此只有显示的将之转换成某种类型的指针之后,才能访问其所指内存区域的数据,其他操作都是不允许的。例如:

int q = 5;
int *p = &q;
void *pv = p;
cout << *pv << endl; // wrong
cout << *(int *)pv << endl; // correct

void*最重要的是用途是作为函数的参数,以便向函数传递一个类型可变的对象,另一种用途就是从函数返回一个无类型的对象,在使用时将它显示转换成适当的类型。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值