发布日期:2015-12-08 09:04 来源: 标签: 编程语言 C++教程 C++变量 C++生存期和作用域
本章我们主要学习C++中变量的生存期和作用域,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学
1、变量的生存期
变量的生存期是指变量值保留的期限,可分为两种情况:
(1)静态存储:变量存储在内存中的静态存储区,在编译时就分配了存储空间,在整个程序运行期间,该变量占有固定的存储单元,变量的值都始终存在,程序结束后,这部分空间才释放。这类变量的生存期为整个程序。
(2)动态存储:变量存储在内存中的动态存储区,在程序运行过程中,只有当变量所在函数被调用时,编译系统临时为该变量分配一段内存单元,该变量有值,函数调用结束,变量值消失,这部分空间释放。我们说这类变量的生存期仅在函数调用期间。
2、变量的作用域
变量的作用域也称为可见性,指变量的有效范围,可分为局部与全局两种情况:
(1)局部变量:在一个函数或复合语句内定义的变量,称为局部变量,局部变量仅在定义它的函数或复合语句内有效。例如函数的形参是局部变量。
编译时,编译系统不为局部变量分配内存单元,而是在程序的运行中,当局部变量所在的函数被调用时,编译系统根据需要临时分配内存,调用结束,空间释放。
例9-17:分析程序的运行结果。
func11( )
{ int x=3;
{ int x=2; /* 第一个复合语句中的局部变量 */
{ int x=1; /* 第二个复合语句中的局部变量 */
printf("*x=%d\n", x); 
}
printf("**x=%d\n", x);
}
printf("***x=%d\n", x);
}
main( )
{ int x=10;
printf("1: x=%d\n", x); 
func11( ); 
printf("2:x=%d\n", x); 
}
程序的运行结果是:
1: x=10 /* 输出主函数内的变量 x */
*x=1 /* 输出第一个复合语句中的变量x */
**x=2 /* 输出第二个复合语句中的变量x */
***x=3 /* 输出函数func11中的变量x */
2: x=10 /* 输出主函数内的变量x */
(2)全局变量:变量在所有函数之外定义称为全局变量,其作用范围为从定义开始,到本文件结束。全程变量一经定义,编译系统为其分配固定的内存单元,在程序运行的自始至终都占用固定单元。如果在定义之前使用该全局变量,用extern加以说明,则可扩展全局变量的作用域。
(3)使用全局变量与局部变量,应注意以下几点:
 ①不同函数内的局部变量可以重名,互不影响。
 ②全局变量与局部变量可以同名,在局部变量起作用的范围内,全局变量不起作用。
 ③全局变量的初始化只能有一次,是在对全局变量说明的时候。
例9-18:分析以下程序的运行结果。
int x=100; /* 全局变量的定义 */
func12( )
{ int x=10; /* 局部变量,函数内有效 */
f( );
ff( );
printf("%d\n", x); 
}
f( )
{ int x=500; /* 局部变量,函数内有效 */
x += 100;
printf("%d\n", x);
}
ff( )
{ x += 100; /* 使用全局变量 */
printf ("%d\n", x);
}
程序运行结果: 600 /* 调用函数f( )的结果 */
200 /* 调用函数ff( )的结果 */
10 /* 函数func12( )的结果 */

相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。