void** 二级指针的一个应用

我之前对二级指针接触很少,函数传入参数我也比较喜欢使用&而不是*来操作,但是最近在项目代码中发现了如下代码

int *a = new int(1);
int *b = new int(2);
*(void**)a = b

最开始,我百思不得其解,这到底是是啥意思,难道与*a=b不等效吗?但是明显*a=b是编译失败的,然后,???

别问,问就写demo,talk is cheap, show me the code。接下来,咱们写几行代码看看:

int *a = new int(3);
int *b = new int(4);

*(void**)a = b;

cout << a << ": " << *a << "  " << *((int*)(*a)) << endl;
cout << b << ": " << *b << endl;

输出结果如下:

这时候,惊奇的发现,*a居然和b指针指向的内存地址是一样(0x00BB9B00=12294912)

咱们再根据这个结果,来理解一下*(void**)a = b,在32位机器下,含义其实与*a=(int)b是一样的,就是把b指针指向内存的首地址赋值给a指针指向的内存。

但是怎么从语法上来解释,暂时我也不知道,待学习...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值