C语言之变量的作用域及存储方式
2013-08-22 10:31
435 查看
1.变量的作用域:
变量的作用域分为局部变量、全局变量和外部变量。1. 局部变量
局部变量是在函数内定义的变量,其作用域仅限于函数内,在函数内才引用,即可以对它赋值或取值。在作用域外,使用它们是非法的。
2.全局变量
全局变量是定义在函数之外的变量,它的作用域是从定义处开始,到所在文件的结束。即从定义之处起,它可以在文本的所有函数中使用。
【全局变量的命名最好取有特殊含义的标识符(例如在变量名前加q_)。防止不经意间改变了它的值。
3.外部变量
全局变量的作用域是在所在文件的整个文件,而一个文件中的全局变量的作用域还可以扩展到其它文件。某个文件中引用另一个文件中的全局变量,只要用extern声明,说明这个变量是在其它文件中已经定义过的外部变量。那么,该文件中不会为外部变量分配内存。
说明:
1.外部变量的定义和应用的差别
外部变量的定义其实就是定义一个全局变量。例如int a;
但是外部变量的引用需要在变量前加上一个extern int a;同时这时不用有初始化。
个人建议:在定义外部变量的时候最好省略extern类别,并提供一个显式的初始化值:int a = 0 ;在引用性声明中,使用存储类别extern,并且不要包含初始化值:extern int a ;
【注意】
外部变量的引用类型必须和其定义类型一致!
2.同一源文件中,允许全局变量和局部变量同名,但在局部变量的作用域内,全局变量不起作用。【即当全局变量与局部变量相遇,局部变量屏蔽全局变量】
2.变量的存储方式
在C语言中,变量除了有类型之分,还有四种存储类别:自动存储变量,静态存储变量,外部存储变量,寄存器存储变量。(1).自动存储变量
1.性质:
--作用域的局部性,其作用域为变量定义所在的模块(一对花括号围起来的部分)内或函数内。
--生存期的暂时性,其生存期为该变量定义所在的函数或模块的执行周期。即一旦进入该函数,c就自动为该变量建立存储区,而一旦退出该函数,c就自动收回此存储区。
--未初始化的变量其值不确定,是无意义的。
(2)定义 关键字auto(也可无),auto int i,j;
举例:
main()
{
int i=100,k=80;
printf("i=%d\n",i);
{
int i=200;
printf("i=%d k=%d\n",i,k++);
}
printf("i=%d k=%d",i,k);
getch();
}
(2)静态存储变量
1.定义: static 数据类型 变量名=初值;
2.种类: 全局和局部两种。
-静态局部存储变量,仅能在所定义的模块内存使用,与AUTO变量不同,它可以保持原值不便:
count_up()
{
static int number=25;
number+=25;
return(number);
}
-静态全局变量,
.性质:作用域-整个程序。生存期的永久性,未初始化的静态变量值为0;
3.静态变量和自动存储变量的区别。
main()
{
count_up();
count_up();
printf("\n");
add();
add();
getch();
}
count_up()
{
static int num0=0;
num0+=25;
printf("%d\t",num0);
}
add()
{
auto int num1=0;
num1+=25;
printf("%d\t",num1);
}
运行结果:
25 50
25 25
(3)外部存储变量
1.用途 用于把大程序分隔若干单元(文件)而开发的场合。说明外部存储变量使用关键字extern。
(4)寄存器存储变量
关键字:register 如:register int e;
寄存器存储变量值存储在CPU的寄存器中,设定这种变量主要是为了提高操作速度。他们常用于循环控制。使用SI,DI寄存器。如果定义寄存器变量超过两个,则多余的按照自动存储变量对待。
相关文章推荐
- 黑马程序员——IOS学习笔记(C语言存储方式和变量作用域)
- C语言变量、函数的作用域及变量的存储方式
- C语言变量、函数的作用域及变量的存储方式
- C语言精华记录——壹(变量的作用域及存储方式)
- 嵌入式学习10(C语言五大内存区间,变量的作用域和生存期,变量的存储类型)
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- C语言各种类型变量存储方式
- C语言 变量的存储方式和生命周期
- iOS开发系列--C语言之存储方式和作用域
- 变量的作用域和存储方式
- c语言变量的存储方式(auto,register,static,extern)及作用域(局部变量/全局变量)详解
- C语言中变量的存储类别及其存储方式
- C语言精华记录——壹(变量的作用域及存储方式)
- C语言中变量的作用域、生命周期及存储区域
- C语言:自己动手查看float以及double类型的变量2.5在内存中的存储方式。
- 黑马程序员----C语言变量作用域,存储类型,变量总结,递归思想篇
- C语言之变量类型和存储方式
- iOS开发系列--C语言之存储方式和作用域
- C语言之变量类型和存储方式
- C语言中变量的存储方式