C语言指针的操作

例子1

如果想要表达,将constants_pool->info+i的位置存放一个u8类型的数据

这面这种写法

*(u8*)(constant_pool->info+i)

意思是constant_pool->info+i的位置先强制转化为一个u8类型的地址,然后再寻址,往里面放数据。




*(u8*)&(constant_pool->info[i])

这一句的理解有点绕。

意思是,将constant_pool->info[i]这个位置的地址先强制转化为指向u8类型的一个地址,然后再寻址。


总结:

两句的功能是完全一样的。需要注意的是,当用中括号表示偏移时,就已经隐含了寻址的操作。

constant_pool->info+i与constant_pool->info[i]的值是不一样的。



例子2

宏定义函数展开的内容是*(Class**)&cp->info[index] = resolve_class;

这里的用法跟例子1基本相同。表达的意思是info[index]位置应该是一个Class*。

这里同样,[index]隐含了一个寻址操作,所以,先用&取地址,然后说明这个位置是一个指向Class*类型的指针,即(Class**),然后在用*寻址,把那个位置真正的填入Class*,也就是resolve_class。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值