c语言的关键字都用什么表示 C语言, 储存型别关键字?
C语言, 储存型别关键字?
C语言, 储存型别关键字是什么?
储存型别关键字有如下4个:
1 auto :宣告自动变数。
此项为预设值。auto int a;和int a;是完全相同的。所以在程式设计中一般看不到auto的使用。
2 extern:宣告外部变数。
功能为扩充套件全域性变数的作用域。
3 register:宣告暂存器变数。
声明后,变数储存于CPU暂存器中。是最快的C语言变数。
但是需要注意的是,CPU暂存器有限的,所以并不是所有宣告为register的变数都会存在暂存器中。使用register更像是一个申请,具体是否可以存在暂存器还要看系统情况。 该项尽量少用。
4 static :宣告静态变数。
有静态区域性变数和静态全域性变数两种。用于区域性变数时,将变数宣告周期延长到整个程式执行。用于全域性变数时,将全域性变数作用域限定在本档案。
储存型别关键字
auto定义的区域性变数,如果在一个复合语句中定义的话,只能在这个语句中使用,出了语句据不能再用了
extern定义的全域性变数,只能在本原始档中被使用,其他的档案则不能呼叫,且定义的变数必须初始化
register变数时暂存器变数,在C语言中,一般认为这个变数等价于auto型别
const是定义常量字元,被定义的变数必须赋值,且该值不能被修改
typedef是定义连结串列常用的关键字,它的作用是将一个已经定义的合法的资料型别重新取一个名字,这个新名字可以继续定义变数
volatile的变数说这变数可能会被意想不到地改变,这样,编译器就不会去假设这个变数的值了。就是说,优化器在用到这个变数时必须每次都小心地重新读取这个变数的值,而不是使用储存在暂存器里的备份。
C语言之什么是储存型别
Turbo C2.0支援四种变数储存型别。说明符如下:
auto static extern register
下面分别来介绍。
一、auto
auto称为自动变数。
区域性变数是指在函式内部说明的变数(有时也称为自动变数)。用关键字auto进
行说明, 当auto省略时, 所有的非全程变数都被认为是区域性变数, 所以auto实际上
从来不用。
区域性变数在函式呼叫时自动产生, 但不会自动初始化, 随函式呼叫的结束, 这
个变数也就自动消失了, 下次呼叫此函式时再自动产生, 还要再赋值, 退出时又自
动消失。
二、static
static称为静态变数。根据变数的型别可以分为静态区域性变数和静态全程变数。
1. 静态区域性变数
它与区域性变数的区别在于: 在函式退出时, 这个变数始终存在, 但不能被其它
函式使用, 当再次进入该函式时, 将储存上次的结果。其它与区域性变数一样。
2. 静态全程变数
Turbo C2.0允许将大型程式分成若干独立模组档案分别编译, 然后将所有模组
的目标档案连线在一起, 从而提高编译速度, 同时也便于软体的管理和维护。静态
全程变数就是指只在定义它的原始档中可见而在其它原始档中不可见的变数。它与
全程变数的区别是: 全程变数可以再说明为外部变数(extern), 被其它原始档使用,
而静态全程变数却不能再被说明为外部的, 即只能被所在的原始档使用。
三、extern
extern称为外部变数。为了使变数除了在定义它的原始档中可以使用外, 还要
被其它档案使用。因此, 必须将全程变数通知每一个程式模组档案, 此时可用
extern来说明。
四、register
register称为暂存器变数。它只能用于整型和字元型变数。定义符register说
明的变数被Turbo C2.0储存在CPU的暂存器中, 而不是象普通的变数那样储存在内
存中, 这样可以提高运算速度。但是Turbo C2.0只允许同时定义两个暂存器变数,
一旦超过两个, 编译程式会自动地将超过限制数目的暂存器变数当作非暂存器变数
来处理。因此, 暂存器变数常用在同一变数名频繁出现的地方。
另外, 暂存器变数只适用于区域性变数和函式的形式引数, 它属于auto型变数,
因此, 不能用作全程变数。定义一个整型暂存器变数可写成:
register int a;
对于以上所介绍的变数型别和变数储存型别将会在以后的学习中, 通过例行程
序中的定义、使用来逐渐加深理解。
c语言中储存型别的问题
刚入门吧,这就像你的家一样,如果你可以不得到别人的允许就进入别人家,别人也进你家,你乐意吗?这涉及到记忆体私有化,为了保护资料改写完全符合标准,从而避免产生更为严重的BUG,例如你从流中获取一个int型别的资料,准备将资料写入变数age中,但是变数age属于另一个类,这时如果流中获取到的是一个字元,比如'a',你直接改写类中的属性,就会造成不可避免的错误。此外,这种私有化操作是为了更好的利用记忆体空间。
比如下列程式码:

#include <stdio.h>using namespace std;int a;int main(){ { int b; } return 0;}
变数a会占据相应记忆体空间,变数b也会占据。但是在{int b}这里的分号结束后,b的记忆体空间被回收,而a尽管没有使用,任然占用记忆体空间。如果一个程式都是靠全域性变数维持,那么我估计你家的photoshop跑起来需要3根2G记忆体条。
关于C语言变数储存型别的问题
1开始已经定义了全域性变数i,而main函式中又有个i的宣告,有什么作用呢?
答:如果重复定义了i变数,那么对于内层的块,有效的是“main函式中的i"
2.然后在new函式中传入了i的值,全域性变数在这里起作用?
和1类似,全域性变数i的作用域为程式执行到程式结束,并且对于每个块,都有效。(大致是这个意思,我表达不是很清楚)。
C语言中静态储存型别问题
C语言的资料区分为静态储存区与动态储存区。
静态储存是指在程式执行期间给变数分配固定储存空间的方式。如全域性变数存放在静态储存区中,程式执行时分配空间,程式执行完释放。
动态储存是指在程式执行时根据实际需要动态分配储存空间的方式。如形式引数存放在动态储存区中,在函式呼叫时分配空间,呼叫完成释放。
C语言中typedef不能定义static储存型别吗?
typedef 用来定义一个变数型别的别名。
static 不是变数型别。它定义存放方式。
#include<stdio.h>
typedef unsigned int array64[64];
int main(){
static array64 a; 这里可用 static
int i;
for (i=0;i<10;i++) a[i]=i;
for (i=0;i<10;i++) printf("%d ",a[i]);
return 0;
}
C语言中,实参的隐含储存型别是? 形参的隐含储存型别是? A、auto B、static C、extern D、register
标准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