C语言中,实参的隐含存储类型是? 形参的隐含存储类型是? A、auto B、static C、extern D、register

如题所述

答案都选A:上面几位胡说霸道。
不是static 形参存储类型只有两种可能,一是auto类型,而是register类型。我给你细细解说
auto 就是堆栈存储 而register的是cpu内部寄存器存储
具体函数的形参采用那种存储方法,这和函数的“调用规则(calling convention)”有关。
调用规则主要设计参数的传递,入栈顺序,寄存器传参,函数返回值的存储和清栈者,调用规则主要有 cdecl stdcall thiscall fastcall等等。栈是函数调用必需的数据结构。你可以在函数声明是注明函数的调用规则:如 int cdecl add (int a,int b) 。 注意函数有默认的调用规则,所以你再写程序时,没有必要注明调用规则。你此外还可以添加编译选项修改调用规则。
cdecl : (c/c++语言默认的调用规则):堆栈传参参数,因此是auto类型。
stdcall :有叫做pascal,WINAPI,这个调用规则出现在windows的API函数中。它也采用堆栈传递参数。
thiscall:类中的函数的调用方式:参数传递和编译器有关 Windows VC中 this指针用ECX寄存器存储,而unix gcc中 this用栈存储。其他参数也是用栈存储。
fastcall:用寄存器存储部分参数加快函数调用,其他参数用栈存储。
所以,没有隐含的存储类型,形参的存储类型和调用规则有关。但是如果真要学究般的考虑这个问题,则答案选A,因为C语言函数的默认调用方式是cdecl,它的参数传递只采用了栈,因此是auto(答案A)
而实参的存储类型可以是A,B,C,D四种,隐含的类型(也就是你在定义变量是,不指明存储类型)是auto(答案A)
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-08
标准C中,只规定了 函数 形参的隐含存储类型是 :
非register (参见C语言参考手册(5th) P65 表4-4).
不过个人觉得应该是 auto , 因为形参也是类似于局部变量,所以 形参的隐含存储类型是 A。

实参根本没有定义变量,它是值,所以它和调用函数处所用的参数值的存储类型相同,既有可能是 auto,也有可能是 static,等等, 比如

void f(int i) // i应该是 auto的
{
}
static int i1 = 0;
auto int i2 = 0;
extern int i3;
register int i4 = 1;

f( i1 ) ; //实参是 static
f( i2 ); //实参是auto
f( i3) //实参是 extern
f( i4); //实参是rigister本回答被网友采纳
第2个回答  2011-08-07
实参应该是static 因为不随形参变化而改变?
形参应该是extern吧 因为调用的函数可以在别的文件中,也需要重新声明?
第3个回答  2011-08-07
static
第4个回答  2011-08-07
B A
相似回答