c++局部变量的销毁问题。

我在某个函数里定义了一些局部变量,如inti;和staticinta;请问在我调用完函数以后他们是否都会自动销毁呢?... 我在某个函数里定义了一些局部变量,如int i;和static int a;请问在我调用完函数以后他们是否都会自动销毁呢? 展开
 我来答
vivo01
推荐于2017-10-03 · TA获得超过185个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:162万
展开全部
int i,这种类型的局部变量在栈上,函数退出后,栈上的数据就无效了,static int a这种类型的在全局段上,在整个程序的生命周期上都是不会销毁的,如果变量的空间是由new或malloc,calloc等动态分配函数分配的,那么是在堆空间上,需要使用delete或free来销毁
xlcsq69
2010-11-25 · TA获得超过7424个赞
知道小有建树答主
回答量:1811
采纳率:0%
帮助的人:816万
展开全部
1,所谓不能返回局部变量,是指局部变量在栈空间中分配内存,函数返回时栈指针回退,当主调函数继续调用其它被调函数时,栈指针上移,上一次函数调用所分配的空间会被本次调用覆盖,如果此时再引用原来的局部变量就会出现不可预见的结果。
所以局部变量在函数返回时并不是被销毁而是相当于可被再次利用。
所以如果第一题你在cout<<x<<endl;前调用一函数,此函数大量分配局部变量,后面的输出值必变!

2。第二题要明确构造函数是在对象构造时调用的,而不是在对象间相互赋值时调用的,你的comp3在对象在申明时已经调用了Complex(double r=0,double i=0).如果你这样写:" Complex comp3=comp1.operator+(comp2); //用对象 接收函数返回的引用" 则拷贝构造函数必被调用到。
所以这样对于"局部对象C的地址&C和《用对象 接收函数返回的引用》的对象comp3地址不同。。。 "应该理解的吧。

补充:向你这样把返回的引用赋给变量是无论怎么都不会变的,因为返回时进行了变量的复制(不一定是调用构造函数),要改变其实我上面已经说了只要在cout<<X前调用一个函数且函数内定义了局部变量即可:
int &x= ABC(); //必须定义成引用
test();
cout<<x;

void test()
{
int a=8;
}
这样X的输出将是8,下题类似不再举例.
我可以帮助你,你先设置我最佳答案后,我百度Hii教你。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aries00219
2010-11-22 · TA获得超过431个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:290万
展开全部
int i;会销毁
static int i;不会销毁
static是静态变量,相当于一个全局变量,所以生命周期是整个程序运行的期间,而int i是动态的,生命在一个函数内,也就是说,一个函数调用结束,它就销毁了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大衍之49
2010-11-22 · TA获得超过1049个赞
知道小有建树答主
回答量:1159
采纳率:0%
帮助的人:1072万
展开全部
函数中的非static变量会销毁,static不会,static 在main结束后销毁

函数中的非static变量存储在函数的堆栈里面,而static存放咋静态存储区,存储的位置不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
41...5@qq.com
2010-11-25
知道答主
回答量:6
采纳率:0%
帮助的人:3.6万
展开全部
int i;会
static int i;不会 static 等程序都运行完才会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式