临时变量的解说和验证

Posted 语风之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了临时变量的解说和验证相关的知识,希望对你有一定的参考价值。

目录

一、什么是临时变量?

       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;
}
 

三、总结

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

 

以上是关于临时变量的解说和验证的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

kettle參数变量具体解说

Msql入门实战之下

c_cpp 快速代码片段,用于在统计(阻止)/ dev / rdsk中的设备时验证fstat64和stat64的行为。

java 临时片段

教程4 - 验证和权限