首页 新闻 会员 周边

.net 返回值的问题

0
[已解决问题] 解决于 2017-12-08 10:48
class cs
{
    public int add(int a,int b)
    {
        int c = a+b;
        return c;
    }


    public void main()
    {
        int k = add(1,2);
    }

}

当add调用完之后,c会被释放掉么?

这个时候给k赋值的是单纯的值还是c的地址?

百鸟朝凤的主页 百鸟朝凤 | 菜鸟二级 | 园豆:260
提问于:2017-12-05 17:20
< >
分享
最佳答案
0

想的太多学的太少

先百度下:作用域.建立下对变量作用域的认知.再谈变量内存释放问题.

奖励园豆:5
吴瑞祥 | 高人七级 |园豆:29449 | 2017-12-05 18:18

我上面写的只是一个简单的例子,如果把int 换成引用类型呢,这个方法在重复的调用,方法内声明的变量不是在方法结束后立即销毁,那会不会造成我程序的内存无限增加?

百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-07 12:22

@百鸟朝凤: 对:变量作用域  有概念吗?

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-07 12:34

@吴瑞祥: 在方法内声明的变量,方法结束后就会销毁?是说这个?

百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-07 12:44

@百鸟朝凤: 变量为什么只能在作用域内使用?因为超出作用域就没了..

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-07 13:14

@吴瑞祥: 问题就在这,变量超出作用域就没了,但是这个变量是用来做返回值的,那返回值传出的是一个副本?还是说这个变量并没有实际回收,只是变成了不可访问了。  如果是副本的话,我程序不结束,方法一直在调用,那副本占用的空间是不是越来越大。  如果不是副本,是他本身的话,那他会在什么时候被销毁?

百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-08 08:26

@百鸟朝凤: 当然是副本..方法一直在调用是不存在的.一个线程肯定绝对百分百同时只有一个方法在被调用.

栈的内存在超出作用域后释放.堆的内存需要代码去释放.

吴瑞祥 | 园豆:29449 (高人七级) | 2017-12-08 10:47
其他回答(3)
0

int是值类型,传递的时候肯定是赋值啦,你先了解什么是值类型和什么是引用类型再说吧,c变量不是立即释放的。

最佳解决方案 | 园豆:25 (初学一级) | 2017-12-05 17:38

那把int 换成引用类型呢?

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-07 12:20
0

k是单纯的值,c已经超出作用域,会被释放的

老码识途呀 | 园豆:418 (菜鸟二级) | 2017-12-05 22:34

要是换成引用类型呢

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-07 12:22
0

c是个方法的局部变量,方法结束时一定会被释放

k是个值类型的变量,给它赋值时,传递的是值的副本。

 

你需要了解一下 作用域的基本概念和值类型引用类型的区别。

西漠以西 | 园豆:1675 (小虾三级) | 2017-12-06 10:01

返回值是引用类型,那什么时候被释放

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-07 12:23

@百鸟朝凤: 

引用类型的对象的内存回收,那归运行时的垃圾回收机制负责。

支持(0) 反对(0) 西漠以西 | 园豆:1675 (小虾三级) | 2017-12-07 14:41

@西漠以西: 是这个理。。。最近看c看的。。。有点混乱了

支持(0) 反对(0) 百鸟朝凤 | 园豆:260 (菜鸟二级) | 2017-12-08 08:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册