免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3939 | 回复: 2
打印 上一主题 下一主题

指针有关的问题,求解惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-10 17:37 |显示全部楼层 |倒序浏览
希望您能从perl原理上解释一下

my @array = qw(this is confused);
my @seeme = ();
for (@array){
   my $val = $_;     #每次都对变量$var重新赋值
   my $ref = \$val;   #每次都重新将$ref指向$var
   push @seeme , $ref;
}
     #到现在@seeme中应该全部是指向$val的指针
for (@seeme){
   print "$_" , "\n" ;     #预期遍历中每次应该打印$var的值,也就是"confused" , 但实际上却分别打印了历史上每一次为var的赋值
}

得到结果:
this
is
confused

预期结果:
confused
confused
confused

论坛徽章:
0
2 [报告]
发表于 2011-06-10 17:59 |显示全部楼层
求正解

论坛徽章:
0
3 [报告]
发表于 2011-06-13 09:24 |显示全部楼层
【 #预期遍历中每次应该打印$var的值,也就是"confused" 】

前半句没错,确实每次打印的都是 $val 的值, ...
flw 发表于 2011-06-11 20:01



    我是这么认为的:指针变量只存放一个内存地址,在本例中即为指向$var的地址,(假如是SCALAR(0x15fd960))而每次对他赋值的时候,赋值内容都应该是一个指向$var的内存地址,而并不关心$var这个变量本身的值是什么。
    我的逻辑是这样的:首先$var占用一个内存空间,当对指针变量赋值,就把指针变量赋值为SCALAR(0x15fd960),执行循环时,指针变量每次都应该赋值为SCALAR(0x15fd960),因为$var所占用的内存的地址并没有发生变化
    显然以上我的逻辑是错误的,因为没有得到预期结果,但究竟是哪一步错了?
         
                     要谢谢以上所有热心朋友的回答,第一次发帖就这么多人帮忙,真的很意外。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP