资源描述:
《专升本C语言课件C08存储属性及预处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C程序设计八存储属性及预处理八存储属性及预处理8.1变量的存储属性8.1.1变量的作用域变量有两个方面的属性:数据类型和存储类别变量的存储属性指:变量的作用域和生存期。作用域有2种:局部变量:在函数内有效(定义在函数内或形式参数)全局变量:从定义点到文件的结尾有效。(定义在函数外,又称外部变量)注意分析作用域时不涉及程序运行的流程。以下哪些是局部变量,哪些是全局变量?判断划线语句是否正确。floatx=6,y;main(){inti;i=x;x=j;}intj;fun1(int*p){inta;
2、a=i*2;}fun2(){intb;b=x+j;}对错错对八存储属性及预处理8.1变量的存储属性全局变量的作用:(1)可以从函数得到多个返回值。(2)简化形参。下面程序采用全局变量得到多个值inta,b;main(){......swap();......}swap(){intc;c=a;a=b;b=c;}八存储属性及预处理8.1变量的存储属性全局变量的作用:(1)可以从函数得到多个返回值。(2)简化形参。比较如下的两个程序:采用全局变量可以简化形参。main(){......fun1(a,b
3、,p);fun2(a,b,p,4);......}fun1(inta,intb,int*p){.....}fun2(inta,intb,int*p,intn){.......fun1(a,b,p);.....}inta,intb,int*p;main(){......fun1();fun2(4);......}fun1(){.....}fun2(intn){.......fun1();.....}八存储属性及预处理8.1变量的存储属性全局变量的作用:(1)可以从函数得到多个返回值。(2)简化形参
4、。全局变量的缺点:使函数的通用性降低。程序容易出错。以下的swap函数拿到其他程序中不能用。inta,b;main(){......swap();......}swap(){intc;c=a;a=b;b=c;}八存储属性及预处理8.1变量的存储属性全局变量与局部变量同名时,全局变量被屏蔽。floatx=6,y;main(){inti;i=x;x=j;}intj;fun2(){intb,x=5;b=x+j;这时的x是局部变量}八存储属性及预处理8.1变量的存储属性全局变量与局部变量同名时,全局变量
5、被屏蔽。程序分析:inta=1;main(){inta=7,b=5;fun(a+b);printf("%d,%d",a,b);}fun(intb){b=a+b;a=a*2;printf("%d,%d",a,b);}2,127,5八存储属性及预处理8.1变量的存储属性全局变量与局部变量同名时,全局变量被屏蔽。程序分析:inta=1;main(){inta=7,b=5;while(b<100)b=b*fun(++a);printf("%d,%d",a,b);}fun(intb){b=a+
6、b;a=a*2;return(b);}9,495八存储属性及预处理8.1变量的存储属性8.1.2变量的生存期变量有2种生存期:动态存储:在函数被调用时分配空间,函数结束时释放。动态存储变量定义时,初值是不确定的值。静态存储:在编译时被赋初值是0,在整个程序运行时一直存在。静态存储main(){fun1();}fun1(){inta;/*a是动态存储的变量*/}fun2(){staticintb;/*a是静态存储的变量*/}b是静态变量,则不管函数fun2有没有被调用,变量b都会在程序一开始运行时
7、就被定义好了。并且初值是0八存储属性及预处理8.1变量的存储属性8.1.2变量的生存期main(){inti;for(i=1;i<=10;i++){fun1();fun2();}}fun1(){inta;}fun2(){staticintb;}变量a,b分别被分配空间几次?a10次b1次八存储属性及预处理8.1变量的存储属性各种变量的生存期外部变量:静态局部变量:动态局部变量(auto)形参函数调用时分配,并且被赋予实参的值。register寄存器变量速度较快静态static静态局部变量既是局部
8、变量,又是静态变量判断题:(1)只要是局部变量都可以定义为寄存器变量。错,静态局部变量不可以。(2)用register定义100变量,其中有些变量将被分配内存单元。对。(3)静态局部变量定义时自动赋初值为0对(4)外部变量不可以用auto说明存储类型。对。(5)外部变量必然是静态存储的变量。对。(6)程序执行到定义静态变量时,该变量被创建,一直到程序结束。错。程序一开始就已创建。八存储属性及预处理8.1变量的存储属性各种变量的生存期外部变量:静态局部变量:动态局部变量(auto)形参函数调用时分