临时变量的解说和验证

目录

一、什么是临时变量?

       1、生命周期

       2、作用范围

二、验证临时变量的特性

       1、证明临时变量的开辟

       2、证明临时变量有生命周期和作用范围

三、总结


一、什么是临时变量?

临时变量指的是未在程序开头部分声明的,待使用它时才声明类型的变量。常见的如函数中定义的变量,循环语句、条件语句中声明定义的变量。这些变量具有生命周期作用范围

1、生命周期:

函数调用时开辟空间形成变量,该变量在函数调用完成以后自动销毁,释放空间。这段存在的时间为生命周期。(从变量声明开始到相应程序段结束)

2、作用范围:

局部变量作用范围为被定义的函数内有效,即“{  }”内有效。(被定义的局部范围内)


二、验证临时变量的特性

1、代码实例验证临时变量的开辟

主函数内通过调用MySwap函数实现变量a、b值的交换,通过运行发现:临时变量x、y与对应的a、b的地址并不相同,且运行结束后a、b的值并没有完成交换。

代码:

printf("main:  &a %p, &b %p\n",&a,&b);//调用MySwap前a,b的地址

printf("MySwap:&x %p, &y %p\n", &x, &y);//调用MySwap时临时变量x,y的地址

输出结果:

实际参数 a 的地址为 007AF8B0,形式参数 x 的地址为 007AF7CC,通过比较,两者的地址并不相同,证明调用函数MySwap时开辟了新的空间形成了临时变量。

2、证明临时变量有生命周期和作用范围

已知临时变量具有生命周期和作用范围.

如图1.1输出结果得知调用MySwap后a,b的值并未交换,而调用MySwap,函数中局部变量x,y的值得到了交换,证明作用范围,即临时变量不能影响作用范围以外的任何变量。

由图1.2得知在调用MySwap以后再输出x的值显示x未定义,证明临时变量具有生命周期。因为在函数调用结束以后临时变量销毁,释放空间,所以显示未定义x。

代码:

	printf("before: %d, %d\n",a,b);//调用MySwap前a,b的值

    printf("MySwap# %d, %d\n",x,y);//调用MySwap,函数中局部变量交换前x,y的值

    printf("MySwap# %d, %d\n",x,y);//调用MySwap,函数中局部变量x,y的值

	printf("after:  %d, %d\n", a, b);//调用MySwap后a,b的值

输出结果:

1.1

1.2


源码


#include<stdio.h>
#include<windows.h>

void MySwap(int x, int y){//传值传参 交换函数
	printf("MySwap:&x %p, &y %p\n", &x, &y);//调用MySwap时x,y的地址
	x ^= y;
	y ^= x;
	x ^= y;
}

int main(){
	int a = 10;
	int b = 30;
	printf("before:%d, %d\n",a,b);
	printf("main:  &a %p, &b %p\n",&a,&b);//调用MySwap前a,b的地址
	MySwap(a,b);
	printf("after: %d, %d\n", a, b);
	system("pause");
	return 0;
}
 

三、总结

函数传参时发生形参实例化,要发生临时拷贝,即形成临时变量(或称为局部变量),局部变量具有作用范围和生命周期。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值