设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1248|回复: 5
打印 上一主题 下一主题

[已经解决] 数组代入问题

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
跳转到指定楼层
1
发表于 2009-7-1 22:14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
2
发表于 2009-7-1 22:28:15 | 只看该作者
因为 $b[0] = $a 和 $b[1] = $a 这两句都是引用的拷贝,它们让变量指向 $a 在内存中的地址,所以当你调用 $e.e 修改了 $a 之后,会同时反映给 $b[0] 和 $b[1]~
要避免这个现象,可以利用对象的克隆:
http://szsu.spaces.live.com/blog/cns!D57D0E50BE1820CF!170.entry
(原帖数据丢失了,这是备份)
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
3
 楼主| 发表于 2009-7-1 22:34:13 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
4
发表于 2009-7-1 22:52:56 | 只看该作者
前者是修改了 $a 指向的对象本身(把 $a 的第一个和第二个元素都改变了),$a 本身还是指向这个对象的,而 $b[0] 和 $b[1] 又指向 $a,所以这两个又都指向该对象,自始至终这三者指向的内存地址值没有改变过。

后者则是让 $a 指向的对象改变了——第一次调用 $e.e 时指向的是 [1, 1] 这个对象,接着又让 $b[0] 指向了 [1, 1];然后第二次调用 $e.e 后,$a 指向了 [2, 2],这就是另外一个对象了,之后 $b[1] 和指向的就是 [2, 2]
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-2-11
帖子
101
5
 楼主| 发表于 2009-7-1 23:15:14 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
61
在线时间
24 小时
注册时间
2008-8-5
帖子
1924
6
发表于 2009-7-1 23:51:27 | 只看该作者
  1. $e = E.new

  2. $z = 1
  3. $e.e
  4. $b[0] = $a.clone

  5. $z = 2
  6. $e.e
  7. $b[1] = $a.clone

  8. p $b[0]     # <= [[1,1],[1,1]]
  9. p $b[1]     # <= [[2,2],[2,2]]
复制代码
你要的是这个效果吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2025-1-12 06:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表