变量的生命周期和{ }的相关知识

生命周期如果和寄存器、内存什么的挂钩,就变得不那么好理解。、

其实生命周期的概念也很简单,无非就是变量从哪到哪有效。这里只说生民周期和大括号{ }的联系


浅显一点说,一个变量的生命周期就是从上一个 { 开始,到下一个 } 结束为止

[1]

看这么一个程序,就会对生命周期的概念更了解一点

int main()
{//1
	int a=5;
	{//2
		int b=0;
		b++;
	}//3
	b++;//error, use without initialized
	return 0;
}

问题——我们已经定义了b,为什么在括号外使用b的时候,会报错呢?

原因是——b的生命周期就是从 {//2 开始, }//3结束,然后b被回收,也就是b不存在了。(但是在VS中内存中的值还在,等待下一次分配)


[2]

int main()
{//1
	int a=5;//old a=5
	{//2
		int a=0;//new a=0
		a++;//new a=1;
		a+=2;//new a=2
	}//3
	a++;//old a=6
	return 0;
}
这段程序给人的第一感觉是重定义!实际上却能够正常运行!

就像函数一样,在 { //2 到 } //3 之间,第二个a是有效的,即使同名。

需要注意的是,在内层的大括号中,由于两个a重名,所以无法访问外层的a。具体值的变化已经在程序中标出。


[3]

int main()
{
	int a=5;//a=5
	{
		int b=0;
		a++;//a=6
		b+=2;//b=2
	}//b died
	a++;//a=7
	return 0;
}//a died
生命周期没结束的变量可以正常操作。参见注释


[4]回顾一下曾经使用过的生命周期相关知识:

1.for循环中定义变量,会在for循环结束后被回收。

for(int i=0;i<n;i++);

2.函数中传递形参,会生成一个拷贝,函数结束后被回收;同时在函数中创建的变量也会被回收。

int cmp(int a,int b)
{
      int c=a+b;//生命周期到下一个}为止
      return a>b;
}

[5]知识补充

如果想要完整的理解生命周期的知识,可搜索以下关键词:

1.变量在内存中的存放--------》全局变量\局部变量\栈区\堆区\动态分配

2.如何告诉编译器这个变量已经存在?------》extern语句的使用

3.连接、外连接-------》编译过程

4.多个cpp以及带.h的编译-------》宏定义\#ifndef



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值