- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 对函数的进一步讨论;变量的属性
数据类型:
存储属性
存储器类型:寄存器、内存;变量的存储类型
auto -----自动型
register-----寄存器型
static ------静态型
extern -----外部型
变量定义格式: [存储类型] 数据类型 变量表;;局部变量与全局变量
局部变量---内部变量
定义:在函数(或复合语句内)定义,其作用域是本函数(或复合语句)
说明:
形参属于局部变量
局部变量可用存储类型:auto、 register 、 static, 默认为auto
main中定义的变量只在main中有效,不能因为在main函数中定义就在整个文件或程序中有效。 main函数也不能使用其它函数中定义的变量。
不同函数中的同名变量,占有不同内存单元,因此不会相互影响
复合语句中的变量;register(寄存器)变量
只有auto变量与形式参数可以作为register变量
register变量和auto变量不同之处在于register变量存放在寄存器中,因此比auto变量存取速度快。通常将频繁使用的变量放在寄存器中,以提高程序执行速度
不能对寄存器变量使用取地址运算符
计算机中寄存器的数量是有限的,而且寄存器的数据长度也是有限的。因此register变量不能定义太多,也不能是数据类型太大的变量(long、float、double型)
目前register变量定义通常是不必要的,优化的编译系统能够识别使用频繁的变量,并将其放到寄存器中;static(静态)变量
static变量存放在内存的静态存储区,在整个程序运行期间占用固定的内存单元。
系统在编译时为static变量分配空间并赋初值,对未赋值的内部static数值型变量,系统自动给它赋值为0;对未赋值的内部static字符型变量,自动赋值为空字符。因为在编译期时赋初值,所以只能赋一次初值且只能在定义时进行。
再次调用static内部变量时,static内部变量的值为上次调用结束时的值。
注意:static内部变量的作用域仍然是定义该变量的函数体(或复合语句)内部。; 定义 说明
次数: 只能1次 可说明多次
位置: 所有函数之外 函数内或函数外
分配内存: 分配内存,可初始化 不分配内存,不可初始化;全局变量---外部变量
有???范围:从定义或有extern声明的位置开始,直至它所在源程序文件的结束。; 若外部变量与局部变量同名,则外部变量被屏蔽;变量存储类型;练习 auto 变量的作用域;main( )
{ void increment(void);
increment( );
increment( );
increment( );
}
void increment(void)
{ int x=0;
x++;
printf(%d\n,x);
};例 变量的寿命与可见性;例 引用其它文件中的外部变量;7.2 内部函数和外部函数;内部函数
内部函数的定义格式如下:
static 数据类型 函数名(形式参数表列)
{ 声明部分;
执行部分;
}
说明:static类型函数只能被其所在文件中的函数调用,不能被其他文件中的函数调用;例如;7.3 编译预处理
作用:对源程序编译之前,对#开头的命令做一些预处理;如 if(x==YES) printf(correct!\n);
else if (x==NO) printf(error!\n);
展开后: if(x==1) printf(correct!\n);
else if (x==0) printf(error!\n);;带参数宏定义
一般形式: #define 宏名(参数表) 宏体;#define MAX(x,y) (x)(y)?(x):(y)
…….
main( )
{ int a,b,c,d,t;
…….
t=MAX(a+b,c+d);
……
}
宏展开:t=(a+b)(c+d)?(a+b):(c+d);;带参的宏与函数区别;文件包含
功能:一个源文件可将另一个源文件的内容全部包含
一般形式: #in
文档评论(0)