12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类

12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类

ID:36723176

大小:31.50 KB

页数:9页

时间:2019-05-14

12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类_第1页
12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类_第2页
12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类_第3页
12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类_第4页
12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类_第5页
资源描述:

《12第12章C语言中用户标识符的作用域和存储类第12章C语言中用户标识符的作用域和存储类》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第12章C语言中用户标识符的作用域和存储类主讲人:成江湖学长电话:13975026749QQ:16347548定义:(definition)指给变量分配确定的存储单元说明:(declaration)只是说明变量的性质,而并不分配存储空间。12.1.1用户标识符的作用域1)在c语言中,由用户命名的标识符都有一个有效的作用域。所谓作用域就是指程序中的某一部分,在这一部分中,该标识符是有定义的,可以被c编译和连接程序所识别。2)每个变量都有自己的作用域,如在sub内定义的变量,不能在其它函数中引用,显然,变量的作用域与其定义语句在程序中出现的部位有直接的关系

2、。3)变量可分为局部变量与全局变量12.1.2局部变量、全局变量、和存储分类局部变量:1)在函数内部或复合语句内部定义的变量;2)函数的形参也是局部变量;3)局部变量也称为内部变量4)局部变量既可以说明成自动类、也可以说明成静态类全局变量:1)在函数外部定义的变量;2)有时全局变量也称为外部变量;3)全局变量只能是静态类存储分类:自动态、静态类存储类别有关的说明符:1)auto(自动)、register(寄存器)、static(静态)、extern(外部)2)这些说明符通常与类型名一起出现,它们可以放在类型名的左边,也可以放在类型名的右边,例如:int

3、i,j;也可写成intautoj,i;3)动态存储区用来保存函数调用时的返回地址,自动类别的局部变量等;静态存储区用以存放全局变量及静态类别的局部变量。12.2局部变量及其作用域和生存期12.2.1auto变量1)当在函数内部或复合语句内定义变量时,如果没有指定存储类,或使用了auto说明符,系统就认为所定义的变量具有自动类别。例如:floata;就等价于:autofloata;2)auto变量的存储单元被分配在内存的动态存储区,每当进入函数体(或复合语句)时,系统自动为auto变量分配存储单元;退出时自动释放这些存储单元另作他用。3)这类局部变量的作

4、用是域是从定义的位置起,到函数体(或复合语句)结束为止。4)自动类局部变量的生存期:所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失(变为无定义)例1:voidsub(floata){inti;………if(i>0){intn;………..Printf(“%d”,n);}}12.2.2register变量寄存器变量也是自动类变量,它与auto变量的区别仅在于:用register说明的变量建议编译程序将变量的值保留在cpu的寄存器中,而不是像一般变量那样,占内存单元。程序运行时,访

5、问存于寄存器内的值要比访问存于内存中的值快的多。因此当程序对运行速度有较高要求时,把那些频繁引用的少数变量指定为register变量,有助于提高程序的运行速度。例2:#includeintpower(int,registerint);main(){ints;s=power(5,3);printf(“%d”,s);}intpower(intx,registerintn){registerintp;for(p=1;n;n--)p=p*x;returnp;}说明:1)cpu中寄存器的数目是有限的,因此只能说明少量的寄存器变量。2)由于r

6、egister变量的值是放在寄存器内而不是放在内存中,所以register变量没有地址,也就不能对它进行求地址运算。3)register变量的说明应尽量靠近其使用的也方,用完之后尽快释放,以便提高寄存器的利用效率。这可以通过把对register变量的说明和使用放在复合语句中实现。12.2.3静态存储类的局部变量当在函数体(或复合语句)内部用static来说明一个变量时,可以称该变量为静态局部变量。静态局部变量与auto、register变量的区别:1)在整个程序运行期间,静态局部变量在内存的静态存储区中占据着永久性的存储单元。即使退出函数以后,下次再进

7、入该函数时,静态局部变量仍使用原来的存储单元。由于并不释放这些存储单元,因此,这些存储单元中的值得以保留,因而可以继续使用存储单元中原来的值。由此可知,静态局部变量的生存期将一直延长到程序运行结束。2)静态局部变量的初值是在编译时赋予的,不是在程序执行期间赋予(自动变量是在程序执行过程中赋初值)。对未赋初值的静态局部变量,c编译程序自动给它赋初值0。12.3全局变量及其作用域和生存期全局变量是在函数外部任意位置上定义的变量,它的作用域是从变量定义的位置开始,到整个源文件结束止。例如:voidfun1(void);voidfun2(void);intsu

8、m;main(){……..sum++;}inttest;voidfun2(){……….sum+

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。