7、C语言中,形参的默认存储类别为。 (A)auto (B) static (C)register (D)extern

 我来答
iiiiiiiipl
2019-06-18 · TA获得超过9923个赞
知道答主
回答量:68
采纳率:66%
帮助的人:3.9万
展开全部

C。

在函数内部或复合语句内定义变量时,如果没有指定的存储类型或使用了auto说明符,系统就认为所定义的变量具有自动类别。

形参即函数的自变量,其初值来源于函数的调用。只有在程序执行过程中调用了函数,形参才有可能得到具体的值,并参与运算求得函数值。形参表相当于变量说明,但应特别注意:此处只能使用类型标识符,而不能直接使用类型。

用auto(或省略)来区分说明的局部变量。当执行进入局部变量所在的块时,在栈上为变量分配存储,退出块时,存储单元被回收。具有自动存储期的变量在进入声明该变量的程序块时被建立,它在该程序块活动时存在,退出该程序块时撤销。在函数内部定义的变量成为局部变量。

扩展资料:

1、register关键字提示编译器把局部变量或函数的形参尽可能放入CPU的寄存器中,以便快速访问。因此变量的字节长度不应该超过寄存器的长度。不要用取地址符(&)去获得此变量的内存地址。例如:

{

register int Miles;

}

2、static是全局变量的默认存储类。例如:

static int Count;

int Road;

main()

{

printf("%d\n", Count);

printf("%d\n", Road);

}

Count与Road两个变量都是默认的static存储类。

3、extern存储类是指全局变量可以被各个对象模块访问。使用extern关键字时,表示变量已经在别处定义,所以不能在此处初始化。

参考资料:

百度百科-形式参数

百度百科-存储类

_whales
推荐于2018-03-14 · TA获得超过2280个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:514万
展开全部
形参是放在堆栈中的除非特殊声明的函数如cxxBuilder fastcall!所以选A;

参数一般不会声明为寄存器变量的!这样的函数没有办法调用!
因为形参放在何处由函数的调用约定来确定,而不是由参数的存储类型决定!

同样外部变量或静态变量也不会,不能定义成寄存器变量。
寄存器变量只适合函数内部定义的,用完不管的,通常是循环的计数变量!

静态和外部是常用的两个存储类型。
外部变量一定在函数外部定义,这就是C,C++,外部变量中的“外部”的真实含义。

静态变量,可以定义在

1)函数外部,属于文件模块的,表示文件内部的具有全局性质的局部变量(存储在全局数据区。
2)函数内部,第一层大括号内,属整个函数全局性质的局部变量。 存储在全局数据区。
3)函数内部的任何非数据定义的两个大括号内部;
分程序(C一般叫语句组)属整个分程序全局性质的局部变量。存储在全局数据区。

而函数内的非静态数据缺省为自动变量,所auto一般会省略不写。

外部变量,一般定义时也省略掉extern,
只有在头文件里,和使用非本文件定义的外部变量时,以及函数内部引用外部变量时,
才写上extern 表示这是引用说明,不是定义,要看定义别处找找。
如果本文件没定义,就是引用别的文件的同名变量!

所以除了函数参数(形参)和函数内部非静态变量,再没有自动变量了。
函数内部可以定义三种变量,局部静态变量,自动变量,寄存器变量;外部变量在函数内部只能有引用说明!不能在函数内部定义!

extern外部,静态static两个存储类型是相对的。
外部变量,全部在函数外部定义。外部变量,分配在全局数据区,是全局变量。

外部是相对函数的。
静态有定义在函数内部,和函数外部的区分,还有函数内部全局,和函数内部某一语句组内部的区分,实际上,无论哪种静态变量,都属于全局变量,分配在全局数据区。
PS:
除了变量外,函数也有 extern外部,静态static 两种存储类型。
由于C语言不允许函数内部定义函数。

所以函数只有这两种存储类型。
函数的缺省存储类型是extern, 所以无论定义,还是引用说明,通常都会省略extern;

C语言中,只有写了static的函数,才是静态函数。
C语言中,函数可以在函数内部,有引用说明,不会在函数定义在函数内部。

C++中 类也有静态变量和静态函数;
由于类的静态函数和静态变量的外部定义会有类名和作用域限定符(也叫作用域运算符)::作为前缀,所以类外定义不写static;
类也有静态变量和静态函数的含义是这个变量和函数属于整个类的(实际也是全局变量,分配在全局数据区),除了类和他的成员,外不能使用它了。
类通过类名,成员通过它本身(obj. ;pobj->; (*pobj). refobj. 类名::)使用;
只要类本身定义了。
不通过类的对象,就可以使用类的静态变量和静态函数。
其他成员,除了构造函数外都必须通过通过类的对象,才能使用。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
newlife9090
2011-08-24 · TA获得超过332个赞
知道小有建树答主
回答量:254
采纳率:0%
帮助的人:305万
展开全部
A
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
135ltyq020
2011-08-25 · TA获得超过705个赞
知道答主
回答量:486
采纳率:0%
帮助的人:278万
展开全部
A.auto B.static C.register D.extern
A 的变量在堆栈里,自然是运行时
B 是静态变量
C 是寄存器变量,使用的是cpu的寄存器
D 是全局变量

BD都是放在数据段中的,编译的时候就已经确定了位置(有的编译器对b和d的处理不一样)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式