- 1、本文档共3页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Keil C51 学习随记-变量
变量
2013年3月6 日星期三
9:33
一个变量的格式如下:
[存储种类] 数据类型 [存储器类型] 变量名表
在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。
存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。
自动变量(auto)
char chr=‘a’;等价于 auto char chr=‘a’;
注意自动变量的作用域
在main函数和符合语句中分别定义了一个同名的字符型自动变量并输出,结果证明符合语句中自动变量的作用域仅
限于符合语句中。
#include stdio.h
void main()
{
char chr=a;
{
char chr=b;
printf(%c\n,chr);
}
printf(%c\n,chr);
}
程序运行结果为
b
a
外部变量(extern)
C51语言允许将大型程序分解为若干个独立放入程序模块文件,各个模块可以分别进行编译然后再连接在一起,在
这种情况下,如果某个变量要在其他程序模块文件中使用,只要在一个程序文件中将该变量定义为全局变量,而在
其他程序模块文件中使用“extern”说明该变量时已经被定义过的变量就可以了。
在整个程序中都具有相同名字的外部变量只能在一处进行定义和初始化。
#include stdio.h
char chr_1=a;
void main()
{
extern char chr_2;
printf(%c\n,chr_1);
printf(%c\n,chr_2);
}
char chr_2=b;
程序运行结果
a
b
chr_1是一个全局变量,不需要使用extern进行声明,而chr_2在定义前被使用,因此使用前必须使用extern进行声
明。
静态变量(static)
分为内部静态变量(又称局部静态变量)和外部静态变量(又称全局静态变量)
使用static定义的变量称为静态变量。它又分为内部静态变量和外部静态变量。在函数体内部定义的静态变量为内
部静态变量,它在对应的函数体内有效,一直存在,但在函数体外不可见,这样不仅使变量在定义它的函数体外被
保护,还可以实现当离开函数时值不被改变。外部静态变量上在函数外部定义的静态变量。它在程序中一直存在,
但在定义的范围之外是不可见的。如在多文件或多模块处理中,外部静态变量只在文件内部或模块内部有效。
内部静态变量放入用法以及与自动变量的区别
#include stdio.h
void main()
{
char i;
分区 Keil C51 的第 1 页
for(i=0;i3;i++)
{
static int s_int=1;
int a_int=1;
printf(s_int=%d ,s_int);
printf(a_int=%d,a_int);
printf(\n);
s_int=s_int+1;
a_int=a_int+1;
}
}
程序运行结果
s_int=1 a_int=1
s_int=2 a_int=1 //静态变量数值可以改动,但是初始化只进行一次
s_int=3 a_int=1
在复合语句中分别定义一个内部静态变量和自动变量,进入复合语句中3次,结果显示由于退出复合语句时内部静
态变量仍然存在并保存其值,自动变量则不复存在,因此内部静态变量能够累加,而自动变量则不能。
(
寄存器变量 register)
使用register定义的变量称为寄存器变量。它定义的变量存放在CPU内部的寄存器中,处理速度快,但数目
少。C51编译器编译时能自动识别程序中使用频率最高的变量,并自动将其作为寄存器变量,用户可以无需专门声
明。
表 1 C51定义的存储器类型与存储空间
存储器类型关键字 存储器空间 说 明
data 内部RAM (00H~7FH ) 128字节,可直接寻址
bdata 内部RAM (20H~2FH ) 16字节,可字节寻址,也可位寻址
i
文档评论(0)