A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨正 中级黑马   /  2012-7-4 12:29  /  2455 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

两个同名变量的值到底有内在联系吗?而或者仅仅只是vs工具的一种显示,并无实质联系呢?这两个值在存储上有联系吗?按理都是在stack(栈)上划分一个独立空间啊。如下图,希望得到详解,在此谢过!
图一:



图二:


又:在同一个Main方法中定义两个同名变量好不好,有不妥吗?

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

8 个回复

倒序浏览
你在 Console.WriteLine(count);设断点了吗?在图片上好象没看出来。
1,若设了段点,就能分析出row的变化情况;
2,若没设断点,程序已编译运行后, row变量的值也会相应发生变化。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
我记得在看数据结构的时候 好像有这个问题
大概意思就是在你第一个变量在释放后第二个变量初始化前的这段时间里 内存中还保留第一个变量存储的数据被称作垃圾数据
这个数据并不能被使用 直到有新的变量占用这个位置后才把原来的数据清除掉

你说的第二个问题 在同一个Main方法中声明同名的变量前提是他们的等级必须不同

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
第一个row初始化时,开辟了一个空间(称为空间1)。而row这个变量就指向空间1,从空间1中读数据。在第二个row未初始化时所有的row都是指向空间1,所以显示18.第二个初始化后,又开辟了一个新的空间(称空间2),这时所有的row都又指向空间2,所以所有的值为0.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你在 Console.WriteLine(count);设断点了吗?

你好,我设了断点,看到了row和col值的变化,但关键是不明白这一变化。不过看了楼下的,我明白了,还是谢谢!
回复 使用道具 举报
大概意思就是在你第一个变量在释放后第二个变量初始化前的这段时间里 内存中还保留第一个变量存储的数据被称作垃圾数据
这个数据并不能被使用 直到有新的变量占用这个位置后才把原来的数据清除掉

我明白了,谢谢!
回复 使用道具 举报
第一个row初始化时,开辟了一个空间(称为空间1)。而row这个变量就指向空间1,从空间1中读数据。在第二个row未初始化时所有的row都是指向空间1,所以显示18.第二个初始化后,又开辟了一个新的空间(称空间2),这时所有的row都又指向空间2,所以所有的值为0.

谢谢你的回答,我明白了,好像苏老师的视频里有讲过,忘了。
回复 使用道具 举报
看了上面的代码,觉得你对变量的生命周期不是很理解;

1.通常声明的变量出了 包住它 的一对{} 它就挂了;
2.对于嵌套的{} 外层声明的变量,内层再声明就会报错
3.对于平行的{} 第一个{}括号中声明的变量,其他{}再声明同名的,他们之间没有任何关系;
4.对于for,if,while这些内置的语法结构体中声明的变量,生命周期在他作用域内;

大概是这样,个人的一点小总结,不对的请指出,希望对你有帮助

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
大概是这样,个人的一点小总结,不对的请指出,希望对你有帮助

很好,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马