赞 | 15 |
VIP | 71 |
好人卡 | 24 |
积分 | 34 |
经验 | 70116 |
最后登录 | 2024-5-1 |
在线时间 | 3054 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 3444
- 在线时间
- 3054 小时
- 注册时间
- 2011-11-17
- 帖子
- 980
|
a=[1,2,3]
a代表了 数组的 首地址
b=a 这时 b和a 值相等 也就是 都是指向了同一片地址
b[0]=0 对b的地址 偏移0个位置 进行节引用 赋值 因为a和b的值 代表的地址相同 所以这时 b可以看做是a的别名 对b的操作会影响到a
a=[1,2,3]
b=a[0]
像这种简单的 元素数组 这时会取出a[0]的值 赋给b 然后 b和a完全没关系了 怎么操作b a都不变
重点是这里
class A
attr_reader :id
def initialize(id)
@id=id
end
def set
@id*=10
end
end
a=[]
for i in 1..3
a.push(A.new(i))
end
b=a[0]
b.set
p a[0].id##30
类对象组成的数组 被取出后 其实也只是取出地址 对b的操作会影响到a
一会影响 一会不影响 其实是RUBY为了方便 自己做的事情 像C里面 都是自定的
简单的int float 这样的数组 复制一份拷贝 花不了多少时间 但是类里面 成员变量大小是未知的 所以复制很消耗效率 于是就取地址了
|
|