黑马程序员技术交流社区

标题: 变量的作用范围 [打印本页]

作者: 没落NOKIA    时间: 2015-1-9 21:56
标题: 变量的作用范围
省略很多
main()
{
         int a=1,b=2;
         mn(a,b);
}
省略很多了,main方法中调用本类的mn方法,为什么mn方法可以访问main方法中定义的变量,能不能结合方法区,方法栈详细解释一下

作者: 郑豪    时间: 2015-1-9 22:18
不是访问 而是你把值传过去了
作者: 没落NOKIA    时间: 2015-1-10 21:09
郑豪 发表于 2015-1-9 22:18
不是访问 而是你把值传过去了

即使是值传递也还是用到了main方法中定义的变量啊,我的意思是说,为什么mn()方法能够使用main方法定义的变量,它俩在内存中不是不在一块吗?怎么就可以?
作者: dream_style    时间: 2015-1-10 22:35
你的mn(a,b);方法必须创建调用它的对象啊,你自定义的变量和创建对象调用的方法都在局部,当然可以访问了
作者: 没落NOKIA    时间: 2015-1-11 14:14
我记得这个涉及到栈内存的知识,两个方法是分开存放的,既然是分开存放的怎么又可以用了呢?
作者: biweibiren    时间: 2015-1-11 22:08
没落NOKIA 发表于 2015-1-11 14:14
我记得这个涉及到栈内存的知识,两个方法是分开存放的,既然是分开存放的怎么又可以用了呢? ...

是分开存放的。
当为mn函数开辟一个新栈的时候,同时将a和b的值(不是变量,在这里就是1和2)传了进去。mn并没有访问a和b。
作者: 没落NOKIA    时间: 2015-1-12 21:50
biweibiren 发表于 2015-1-11 22:08
是分开存放的。
当为mn函数开辟一个新栈的时候,同时将a和b的值(不是变量,在这里就是1和2)传了进去。m ...

那不还是从a和b得到的1,2这两个值吗?变量a和b的值传给了mn()方法的形式参数,我不明白的是为什么mn()为什么能从main()方法的方法栈得到1、2这两个值?
作者: hmyf150122    时间: 2015-1-12 22:55
其实是main调用mn方法,main中的变量还是在它的范围内,它是在他范围内用,只把值传递给函数,不要想太多
作者: 没落NOKIA    时间: 2015-1-13 22:08
hmyf150122 发表于 2015-1-12 22:55
其实是main调用mn方法,main中的变量还是在它的范围内,它是在他范围内用,只把值传递给函数,不要想太多 ...

就是有些特别想知道的感觉
作者: 没落NOKIA    时间: 2015-1-14 21:30
有没有高人指点啊?
作者: q798500920    时间: 2015-1-14 22:12
a,b是mn函数的参数,                    




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2