局部变量隐含的存储类别是
C语言,局部变量的存储类别自动默认为
A,函数内部或语句组内部的局部变量默认是自动变量,即auto。
❷ 在C++语言中,局部变量的隐含存储类型是() auto 无存储类型 答案为什么是无存类型
一个C变量有以下两种存储时期之一:静态存储时期(static
storage
ration)和自动存储时期(automatic
storage
ration)。
具有代码块作用域的变量一般情况下具有自动存储时期。在程序进入定义这些变量的代码块时,将为这些变量分配内存;当退出这个代码块时,分配的内存将被释放。该思想把自动变量使用的内存视为一个可以重复使用的工作区或者暂存内存。
局部变量都属于自动类型,即一旦程序栈弹出,局部变量消失。
❸ C语言中函数的隐含存储类型
auto
自动存储类别
关于动态存储方式与静态动态存储方式
从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。
从另一个角度,从变量值存在的作时间(即生存期)角度来分,可以分为静态存储方式和动态存储方式。
静态存储方式:是指在程序运行期间分配固定的存储空间的方式。
动态存储方式:是在程序运行期间根据需要进行动态的分配存储空间的方式。
用户存储空间可以分为三个部分:
程序区;
静态存储区;
动态存储区。
全局变量全部存放在静态存储区,在程序开始执行时给全局变量分配存储区,程序行完毕就释放。在程序执行过程中它们占据固定的存储单元,而不动态地进行分配和释放。
动态存储区存放以下数据:
函数形式参数;
自动变量(未加static声明的局部变量);
函数调用实的现场保护和返回地址。
对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。
在C语言中,每个变量和函数有两个属性:数据类型和数据的存储类别。
auto变量
函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。
函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。例如:int f(int a){ /* 定义f函数,a为参数 */ auto int b,c=3; /*定义b,c自动变量*/ /* …… */}
a是形参,b,c是自动变量,对c赋初值3。执行完f函数后,自动释放a,b,c所占的存储单元。
关键字auto可以省略,auto不写则隐含定为“自动存储类别”,属于动态存储方式。
用static声明局部变量
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,这时就应该指定局部变量为“静态局部变量”,用关键字static进行声明。
【例8-15】考察静态局部变量的值。
#include<stdio.h>intf(inta){autointb=0;staticintc=3;b=b+1;c=c+1;return(a+b+c);}intmain(void){inta=2,i;for(i=0;i<3;i++)printf("%d ",f(a));return0;}
对静态局部变量的说明:
静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储空间,函数调用结束后即释放。
静态局部变量在编译时赋初值,即只赋初值一次;而对自动变量赋初值是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。
如果在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。
【例8-16】打印1到5的阶乘值。
#include<stdio.h>intfac(intn){staticintf=1;f=f*n;returnf;}intmain(void){inti;for(i=1;i<=5;i++)printf("%d!=%d ",i,fac(i));return0;}
register变量
为了提高效率,C语言允许将局部变量得值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register作声明。
【例8-17】使用寄存器变量。
#include<stdio.h>intfac(intn){registerinti,f=1;for(i=1;i<=n;i++)f=f*i;returnf;}intmain(void){inti;for(i=0;i<=5;i++)printf("%d!=%d ",i,fac(i));return0;}
对寄存器变量的几点说明:
只有局部自动变量和形式参数可以作为寄存器变量;
一个计算机系统中的寄存器数目有限,不能定义任意多个寄存器变量;
局部静态变量不能定义为寄存器变量。
用extern声明外部变量
外部变量(即全局变量)是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。如果外部变量不在文件的开头定义,其有效的作用范围只限于定义处到文件终了。如果在定义点之前的函数想引用该外部变量,则应该在引用之前用关键字extern对该变量作“外部变量声明”。表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。
❹ 凡是函数中未指定存储类别的局部变量,其隐含的存储类别是
自动存储类型
❺ 函数的隐含存储类别是()
函数的存储类型指的是其他文件模块可否访问,其类别可以是extern或static。
static是指该函数只能被本源程序文件道中的模块访问。extern是指可被本源程序文件外的模块访问。
C语言中函数的存储类型隐含为版全局的,因此默认为extern。
函数内定义的变量,默权认作用域在本函数内,即其类型是auto。
(5)局部变量隐含的存储类别是扩展阅读:
在C语言中,提供了四种存储类型的存储说明符:auto、Register、Extern和static。这四个存储类别说明符有两个存储术语:自动存储术语和静态存储术语。
“自动”和“寄存器”对应的是自动存储周期。具有自动存储周期的变量在进入声明变量的块时被创建,在块活动时存在,在块退出时被撤销。在函数中定义的变量成为局部变量。在一些C教科书中,局部变量被称为automatic,这与使用可选关键字auto定义局部变量的做法一致。
Extern通常用于变量声明:在*中的另一个文件中引用全局变量。在*.h中应该使用extern来声明全局变量。
❻ 局部变量的储存类别是什么变量,静态局部变量和寄存器变量
C语言存储类型有四种,分别是auto, extern, register, static。
1、局部变量,在没有任何修饰的情况下,存储类型为auto。
即定义局部变量int a;和auto int a;是相同的。
auto为缺省类型。
2、静态局部变量。
静态局部变量是指有static修饰的局部变量,比如
static int a;
其存储类型为static。
3、寄存器变量。
是指用register修饰的变量,比如:
register int a;
其存储类型为register。
❼ 在c语言中,未指定的局部变量,其隐含的存储类别为静态存储,为什么不对
隐含的存储类别为动态存储,即auto型的,如果要静态,需要在变量前加上static关键字
❽ 函数中未指定存储类型的局部变量其隐含的存储类型是什么
在什么语言里边喽 C,C++等里是不让它存在的(通不过) 在VB里是ojbect类型
❾ 【求助c语言】,凡是函数中未指定存储类别的全局变量,其隐含的存储类别为
全局变量其默认储存类型都是extern
,
而局部变量的默认储存类型是
auto,
函数中声明的变量是局部变量,所以原题中说
“函数中未指定存储类别的全局变量”
这句本身就有问题。
记着:
全局变量
extern
局部变量
auto
❿ C语言中,函数的隐含存储类别是 auto 还是 extern,为什么两种答案我都看到过
函数的存储类型指的是其他文件模块可否访问,其类别可以是extern或static。
static是指该函数只能被本源程序文件道中的模块访问。extern是指可被本源程序文件外的模块访问。
C语言中函数的存储类型隐含为版全局的,因此默认为extern。
函数内定义的变量,默权认作用域在本函数内,即其类型是auto。
(10)局部变量隐含的存储类别是扩展阅读:
C语言中提供了存储说明符auto、register、extern、static说明的四种存储类别。四种存储类别说明符有两种存储期:自动存储期和静态存储期。
其中auto和register对应自动存储期。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。在某些C语言教材中,局部变量称为自动变量,这就与使用可选关键字auto定义局部变量这一作法保持一致。
extern用在变量声明中常常有这样一个作用:要在*.c文件中引用另一个文件中的一个全局的变量,那就应该放在*.h中用extern来声明这个全局变量。
extern用于变量的用法:
1、extern int a;//声明一个全局变量a
2、int a; //定义一个全局变量a
3、extern int a =0 ;//定义一个全局变量a 并给初值。一旦给予赋值,一定是定义,定义才会分配存储空间。(注意:经过测试在GCC中,这样定义变量是不能通过编译的,而在VS2013可以)