第6章节-函数及预处理.ppt

  1. 1、本文档共55页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3. 函数原型的声明 6.1.4 函数参数的传递 int fun1(int x,int y) { int m; m=x+y; a=a+10;b=b+20; z=x+y; printf(Change ab: a=%d,b=%d,z=%d,m=%d,a,b,z,m); return(z); } (1)---a=24,b=42,m=0 Change ab: a=34,b=62,z=66,m=66 (2)---a=34,b=62,u=66,m=10 Change ab: a=42,b=24,z=36,m=36 (3)---a=42,b=24,u=36,m=20 6.3.2 变量的存储方式 按照变量存在时间的不同,变量的存储方式可分 为“静态存储”和“动态存储”两种。 静态存储变量: 存放于静态存储区,在程序整个运 行过程中,始终占据固定的内存单元。 动态存储变量: 存放于动态存储区,根据程序的运 行状态(如:函数调用)而临时分配的单元,且单 元并不固定。 以上为两大类,又分为四种具体形式: 1. 自动型变量(auto) 2. 静态(static)变量 3. 寄存器(register)变量 4. 外部(extern)变量 1. 自动变量(auto) 其一般形式为: [auto]类型名 变量名 auto可省略 特点: (1) 自动变量的作用域仅限于定义该变量的结构内。 (2) 自动变量属于动态存储方式,只有定义该变量的函数被调用时才给它分配存储单元,函数调用结束,释放存储单元。 (3) 由于自动变量是局部变量,因此不同的区间允许使用同名的变量,不会混淆。下面程序表明了这种情况。 input a number:2↙ s=4 p=4 s=100 p=100 #include stdio.h void main( ) { auto int a,s=100,p=100; printf(\n input a number:\n); scanf(%d,a); if(a0) { auto int s,p; s=a+a; p=a*a; printf(s=%d p=%d\n,s,p); } printf(s=%d p=%d\n,s,p); } 2. 静态变量(static) 其一般形式为: static 类型名 变量名 (1) 静态局部变量 在局部变量的说明前再加上static说明符就构成静态局部变量。 例如: static int a,b; static float x=1.9; 静态局部变量属于静态存储方式。 1 2 3 4 [例6-9] 重复调用同一函数四次,观察静态变量值的变化。 思考:上面的程序中如果 去掉static,结果又会怎样呢? #include stdio.h void main( ) { int i; void add( ); for(i=1;i=4;i++) add( ); } void add( ) { static int a=0; a++; printf(%d\n,a); } (2) 静态全局变量 在全局变量的说明之前加上static说明符就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。但这两者的区别在于作用域的扩展上。非静态全局变量的作用域可以扩展到是整个源程序,静态全局变量则限制了其作用域,即静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用。 3. 寄存器变量(register) 其一般形式为: register int 变量表; 寄存器变量与auto变量只在保存位置上有区别,其余方面均相同。寄存器变量是把数据存储在计算机寄存器单元上,其数据存取速度比内存单元快得多。 4. 外部变量(extern) 如果在全局变量的作用域之外要使用全局变量,则应事先用extern说明。 其一般形式为: extern 类型说明符 外部变量名; 它只起说明作用,不分配存储单元,对应的存储单元在全局变量定义时分配。 6.4 编译预处理 前面介绍的文件包含(#include)和宏定义(#define)都是编译预处理指令。在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,它们称为预处理部分。在形式上都以“#”开头,不属于C语言中真正的语句。 C语言主要包括3种预处理功能:宏定义、文件包含、条件编译。合理地使用预处理功能,编写的程序便于阅读、修改

文档评论(0)

xina171127 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档