inout

inout处理普通变量

最后的结果是10,inout的目的就是能在函数内去修改形参,然后影响实参,或者说修改函数内的参数,影响外面的参数

看汇编代码把5赋值到一个地址就是num的地址,然后把地址给rdi(rdi一般是用来传参),然后调用函数

不详细解释了大约就是把rdi之前传的地址和值分开,然后把值+5放回原来的地址,然后再把地址值取出来,放入rax,返回到main,所以对于普通的变量就是传递地址

inout处理属性

实际验证了一下,inout确实能修改属性,看下汇编指令

先看函数,除了rsp rbp等栈操作,就一段汇编代码看,就是把10赋值给了rdi存储的地址值

然后返回main,把rdi敲出来,就是dir的地址,也没毛病,因为结构体的第一个值就是存储着第一个属性

函数是没啥变化,就看外部对于rdi做了什么操作

可以看到对于计算属性来说,会用get获取到值,然后调用yAdd,调用完之后再调用setter方法,可以理解成这样的代码

let a = dir.y_offset

yAdd(&dir.y_offset)

let 临时变量 = y_os

dir.y_offset = 临时变量

这里只针对计算属性,其它属性和变量不是这样的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值