检查自变量的生命周期和作用域

检查自变量的生命周期和作用域

#include<stdio.h>
int total(int n);
int reverse(int n);
int main()
{
	int x=123;
	printf("main:  &x=%x,x=%d\n",&x,x);    //输出x的地址和值
	total(x+1);
	printf("main:  &x=%x,x=%d\n",&x,x);    //输出x的地址和值 
	reverse(x+2);
	printf("main:  &x=%x,x=%d\n",&x,x);    //输出x的地址和值
	return 0;
 } 
 int total(int n)
 {
 	int t=0;
 	printf("total:  &n=%x,&t=%x,n=%d\n",&n,&t,n);   //输出n和t的地址,及n的值 
 	return t;
 }
 int reverse(int n)
 {
 	int m=0;
 	printf("reverse:  &n=%x,&m=%x,n=%d\n",&n,&m,n);   //输出n和m的地址,及n的值 
 	return m;
 }

输出结果分析:主函数main在调用函数total之前,起自变量x在其生命周期和作用域内。在调用函数total时,主函数main的自变量x作为实参给total的形参n初始化之后,离开作用域,函数total的自变量n和t进入其生命周期和作用域。从函数total返回主函数时,函数total的自变量n和
t结束了生命周期也就离开了作用域。主函数的自变量x回到作用域,在调用函数reverse的,main的自变量x作为实参给reverse的形参n初始化之后,离开作用域,函数reverse的自变量n和m进入生命周期和作用域,而且他们的空间恰是函数total的自变量n和t的空间,这是因为后者的空间
被撤销后,分配给了前者。从函数total返回主函数时,主函数的自变量x回到作用域,因为它的生命周期还没结束,所以他的地址和调用total之前的地址一样。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值