sytn.net
当前位置:首页 >> 返回局部变量的引用 >>

返回局部变量的引用

1,所谓不能返回局部变量,是指局部变量在栈空间中分配内存,函数返回时栈指针回退,当主调函数继续调用其它被调函数时,栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,如果此时再引用原来的局部变量就会出现不可预见

但是java不是这样的.java中线程在调用一个方法时,jvm会将会在该线程对应的栈中压入一个帧,当执行这个方法时,它使用这个帧来存储局部变量,操作数,参数.当方法执行完后,对应的帧则从栈中弹出,并把返回结果存储在调用方法的帧的操作数栈中.所以java中返回局部变量不会有问题,局部变量的值已经返回到了调用该方法的地方,.

你对作用域的理解还是不够啊,类的对象在创建时,对象的成员就有了,直到对象被析构掉,该对象的成员生命周期结束.局部变量的生命周期不会比它所在的函数长,返回时这个函数使用的内存都被收回了,更不存在保存局部变量的那块内存了,它的引用更没有意义了.

你需要弄懂 java 运行的时候 栈 跟堆的区别,栈指的是方法栈 ,每运行一个方法,就会把一个代表方法的对象(想不起来这个对象叫什么了,好像是叫栈帧),push进 方法栈里,当方法结束的时候,pop出方法栈. 这个是运行时候的逻辑.每一

1)局部变量只在本函数范围有效,在此函数以外是不能使用这些变量;全局变量的有效范围是从定义变量的位置开始到本源文件结束.2)局部变量是程序运行到该函数时给该变量分配内存空间,函数结束则释放该内存空间;全局变量是程序运行时事先分配内存空间,当程序结束时释放内存.

局部变量返回的是个值,使用的是他的值,可以继续使用;指针是指向一段空间,函数调用结束后,空间就释放了.

因为局部变量的地址是随机的,在子函数运行结束后此局部变量的地址会释放,还给系统,因此无法返回一个确定的地址(即此局部变量的指针)

返回值是数值时,是将函数中的局部变量里存的值赋给另一个变量例如a=fun(b,c);就是将fun函数里面的局部变量赋值给a,之后fun函数里的局部变量会释放,回收他们的内存空间,因此一旦出了fun函数,那么里面的局部变量就没有意义了.而返回引用的时候,引用的变量的内存空间不会因为函数结束而被回收,因此出了fun函数后,引用的变量仍会保持最后一次被改动的值.希望对你有所帮助.

return *p返回的是值,并不是指针更不是引用. int *sum(int a,int b) { int temp = a+b; return &temp; //don't do this } 这样才是返回临时变量的指针,会出错!

条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用这种情况就要返回值.

网站首页 | 网站地图
All rights reserved Powered by www.sytn.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com