永发信息网

C语言中的自动变量和寄存器变量是什莫?

答案:4  悬赏:40  手机版
解决时间 2021-04-02 05:00
C语言中的自动变量和寄存器变量是什莫?
最佳答案
1、auto[自动]存储类型 在代码块之间传递信息的一种方法就是使用外部变量。 当一个变量在函数的外部被声明时,它的存储空间是永久分配的, 它的存储类型是extren. 外部变量的声明看上去和函数或代码块内部所声明的变量一样。 外部变量对于它之后的所有函数都有效。在代码块或函数后, 外部变量仍然存在。

2、register[寄存器] 存储类型告诉编译器相关的变量应该改量存储在高速度的寄存器中。 使用register存储类型的目的一般是为了提高执行速度, 但是,register声明只是向编译器所提出的“建议”, 并非强制要求。
全部回答
自动变量就是AUTO型变量,一般作为局部变量;
寄存器变量是存储在CPU内的,所以它的调用别自动、静态变量都快。
一、auto
auto称为自动变量。
局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进
行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上
从来不用。
局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这
个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自
动消失。
二、register
register称为寄存器变量。它只能用于整型和字符型变量。定义符register说
明的变量被Turbo C2.0存储在CPU的寄存器中, 而不是象普通的变量那样存储在内
存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个寄存器变量,
一旦超过两个, 编译程序会自动地将超过限制数目的寄存器变量当作非寄存器变量
来处理。因此, 寄存器变量常用在同一变量名频繁出现的地方。
另外, 寄存器变量只适用于局部变量和函数的形式参数, 它属于auto型变量,
因此, 不能用作全程变量。定义一个整型寄存器变量可写成:
register int a;
C语言学习之变量存储
C语言中对变量的说明包括两方面的内容:变量类型以及变量的存储类型。变量类型如:int(整形),char(字符型)是用来说明变量所占用的内存空间的大小。变量存储类型用来说明变量的作用范围。
C语言的变量存储类有:自动类、寄存器类、静态类和外部类。
关键字auto加在变量名及其类型前,用来说明它是自动变量。局部变量是指在函数内部说明的变量(有时也称为自动变量)。用关键字auto进 行说明, 当auto省略时, 所有的非全程变量都被认为是局部变量, 所以auto实际上 从来不用。 局部变量在函数调用时自动产生, 但不会自动初始化, 随函数调用的结束, 这个变量也就自动消失了, 下次调用此函数时再自动产生, 还要再赋值, 退出时又自动消失。
static称为静态变量。根据变量的类型可以分为静态局部变量和静态全程变量。
1. 静态局部变量
它与局部变量的区别在于: 在函数退出时, 这个变量始终存在, 但不能被其它
函数使用, 当再次进入该函数时, 将保存上次的结果。其它与局部变量一样。
2. 静态全程变量
静态 全程变量就是指只在定义它的源文件中可见而在其它源文件中不可见的变量。它与
全程变量的区别是: 全程变量可以再说明为外部变量(extern), 被其它源文件使用,而静态全程变量却不能再被说明为外部的, 即只能被所在的源文件使用。
extern称为外部变量。为了使变量除了在定义它的源文件中可以使用外, 还要 被其它文件使用。因此, 必须将全程变量通知每一个程序模块文件, 此时可用 extern来说明。
寄存器变量to能够长在执行速度很重要的情况下使用。其思想是告诉编译程序把该变量放在一个CPU寄存器中。因为数据在寄存器中操作比在内存中快,这样就提高了程序代码的执行速度。寄存器变量的说明是在变量名及类型之前加上关键字register。值得注意的是取地址运算符&不能作用于寄存器变量。
file1.c
#include
#include
int reset();
int next();
int last();
int sum(int );
int i=1;
void main()
{
auto int i,j;
i=reset();
for(j=1;j<=3;j++)
{
printf("i=%d\tj=%d\n",i,j);
printf("next(i)=%d\n",next());
printf("last(i)=%d\n",last());
printf("sum(i+j)=%d\n",sum(i+j));
}
}
file2.c文件
static int i=10;
int next()
{
return(i+=1);
}
int last()
{
return(i-=1);
}
int sum(int i)
{
static int j=5;
return(i=j+=i);
}
file3.c文件
extern int i;
reset()
{
return(i);
}
运行结果:
i=1 j=1
next(i)=11
last(i)=10
sum(i+j)=7
i=1 j=2
next(i)=11
last(i)=10
sum(i+j)=10
i=1 j=3
next(i)=11
last(i)=10
sum(i+j)=14
具体分析一下三个文件中的变量的种类。
在file1.c的开头声明i是外部变量,并出示化为1。而在main函数内部,说明了两个自动变量i和j,这样在main内部出现的i就是自动量。在file3.c的开头说明i是外部的,表明它与file1.c定义的i是同一个变量,所以reset的值返回的就是这个i的当前值1。file2.c文件已开始就定义了变量i,并声明为静态变量,因此它的使用范围只在当前文件中使用。然而从函数sum中定义来看,其内部用到的i是形式参数,j是内部静态变量,它们与以前的i,j都不同。
具体执行过程分析如下:
首先程序经过编译后声称可执行文件,运行可执行文件后,函数从Main函数体进入,在初始化的过程中得到i为全局变量,初值为1。进入main函数后首先调用函数reset(),进入文件file3.c,文件file3.c声明i为外部变量,所以此时i的值为1,则返回的值为1。函数reset()执行完后返回主函数,继续执行循环体中的程序。循环体首先调用函数next(),程序进入file2.c文件,判断i为静态变量,所以此时i的值为10,执行next()之后i的值为11,返回值为11,并将11作为i的值。当调用last()函数时,判断i的值为11,执行函数后,i的值变为10,并将10作为i的值。最后执行函数sum(i),此时值的注意的是执行程序时传递的是形参,即第一次调用时实际计算的值为sum(i+j=2),这样调用函数sum(i)后执行的结果为i=5+2=7,即为执行的结果。依次类推,分别为7,10,14。
通过以上的程序可以理解不同的存储类型的作用范围不同,在程序设计中如何灵活的使用各种不同的存储类型是能够使程序更灵活。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
求白熊铃星群全CG,包括被和谐的,谢谢,确定
荔城区莆田双洋投资哪位知道具体地址啊
幸福里摄影基地地址在什么地方,我要处理点事
每种纸质的纸箱,它所承受范围重量是多少
用刷机精灵刷机到刷机环境安装时手机重启到安
有以下程序 #include main(){int x;scanf
“there's”怎么读?
阅读下面的文字,根据要求作文。(60分)“思
首尔地铁站4号线怎么换乘2号线
买了三注中国福利彩票标注3倍是什么意思
父母有两座坟墓好不好
日本最逼真机器人是什么样子的?
档案和户口不在一起有什么弊端
求助,protel 99se版本中,7805元件的封装TO2
单选题下列关于病毒叙述,正确的是A.烟草花叶
推荐资讯
梦见掉了翡翠找不回来好不好
二味秘精汤
焖烧锅哪种好?听说虎牌的焖烧锅质量很好,跪
是什么因素导致了1990年前后青岛市的发展。
简述vi程序有什么构成,其各部分的功能是什么
香河九中招生要求
棒打鸳鸯,是什么意思
求M站的邀请码。就是那个声优的网站。>.<求私
拔河的拔字怎么组词
320除以8等于多少
西方曾盛行的“黄祸论”是一种什么学说?
西安装修铲墙皮多少钱平米
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?