首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

for循环局部变量有关问题

2013-08-24 
for循环局部变量问题见代码:#include cstdlib#include iostreamusing namespace stdclass Person{pub

for循环局部变量问题
见代码:


#include <cstdlib>
#include <iostream>

using namespace std;

class Person
{
public:
   int a;
   int b;   
public:
~Person()
{
        cout<<"打印出这句,便证明每轮循环后都调用了析构"<<endl;
    }
};
int main(int argc, char *argv[])
{
    for(int i=0;i<10;++i)
    {
            Person p;
            cout<<&p<<" "<<p.a<<" "<<p.b<<endl;//既然调用了析构,为何每打印的地址值都一样呢
            p.a=10;
            p.b=20;
    }

for(int i=0;i<10;++i)
{
int a;
cout<<a<<endl;//类似上面的循环,后9轮循环都打印出了10,a不是局部变量么,每轮循环结束都销毁了,为何能打印出上轮的值呢?
a=10;
}

    system("PAUSE");
    return EXIT_SUCCESS;
}



环境Win7 X86 Intel,DevCPP4.9.1 。求助。谢过。
[解决办法]
只能说运气问题。碰巧程序运行时,没有其他变量占有那块内存。
[解决办法]
内存里的值没有被擦除。
[解决办法]
这是系统来决定的!我们决定不了的!

只要注意变量的生命周期就好!,在一定的生命周期中

是会销毁,然后重新申请栈空间就好啦!

至于相同和不相同,不是我们能操作!也是无法知道的!

[解决办法]
局部变量的分配,比如分配一个int,就把栈指针加4,释放的时候,就减4,所以你在循环里面每次分配地址是一样的(因为每次都有释放),而且虽然没有标准来规定编译器非要这么做,但可以肯定的是,基本上都这么做,因为没有更好的办法了。
[解决办法]
1、谁规定说释放之后的内存空间就不能再用?系统一直在对同一块内存不断的获取-释放,没有问题。
2、局部变量的生命周期是以作用域作为界限的,for循环体就是一个作用域。
[解决办法]
局部变量销毁不等于内存擦除,内存还留着那个值的,只有当这块内存被其它东西写进来了才回擦除!

热点排行