C语言的32关键字

表(1.1)C语言标准定义的32个关键字

关键字                                   意 义

 auto          声明自动变量,缺省时编译器一般默认为

int              声明整型变量

double      声明双精度变量

long          声明长整型变量

char          声明字符型变量

float          声明浮点型变量 

short        声明短整型变量

signed      声明有符号类型变量

unsigned   声明无符号类型变量

struct        声明结构体变量

union       声明联合数据类型

enum       声明枚举类型

static      声明静态变量

switch     用于开关语句

case        开关语句分支

default    开关语句中的“其他”分支

break       跳出当前循环  

register    声明寄存器变量

const         声明只读变量

volatile      说明变量在程序执行中可被隐含地改变

typedef      用以给数据类型取别名(当然还有其他作用)

extern       声明变量是在其他文件正声明(也可以看做是引用变量)

return       子程序返回语句(可以带参数,也可不带参数)

void           声明函数无返回值或无参数,声明空类型指针continue结束当前循环,开始下一轮循环

do           循环语句的循环体

while       循环语句的循环条件

if             条件语句

else         条件语句否定分支(与if连用)

for          一种循环语句(可意会不可言传)

goto        无条件跳转语句

sizeof      计算对象所占内存空间大小

1.1,最宽恒大量的关键字----autoauto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量

都是auto的。

1.2,最快的关键字---- register

register:这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中而不是通过内

存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个CPU的寄存器也就那么

几个或几十个,你要是定义了很多很多register变量,它累死也可能不能全部把这些变量放

入寄存器吧,轮也可能轮不到你。

1.2.1,皇帝身边的小太监----寄存器

不知道什么是寄存器?那见过太监没有?没有?其实我也没有。没见过不要紧,见过就

麻烦大了。^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交

给皇帝旁边的小太监,小太监呢再交给皇帝同志处理。这个小太监只是个中转站,并无别

的功能。

好,那我们再联想到我们的CPU。CPU不就是我们的皇帝同志么?大臣就相当于我们

的内存,数据从他这拿出来。那小太监就是我们的寄存器了(这里先不考虑CPU的高速缓

存区)。数据从内存里拿出来先放到寄存器,然后CPU再从寄存器里读取数据来处理,处理

完后同样把数据通过寄存器存放到内存里,CPU不直接和内存打交道。这里要说明的一点

是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉,

它从不主动干什么事。一个皇帝可能有好些小太监,那么一个CPU也可以有很多寄存器,

不同型号的CPU拥有寄存器的数量不一样。

为啥要这么麻烦啊?速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只

不过其存取速度要比内存快得多。进水楼台先得月嘛,它离CPU很近,CPU一伸手就拿到

数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快多了?那有人问既然

它速度那么快,那我们的内存硬盘都改成寄存器得了呗。我要说的是:你真有钱!

1.2.2,使用 register 修饰符的注意点

虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是

能被CPU寄存器所接受的类型。意味着register变量必须是一个单个的值,并且其长度应小

于或等于整型的长度。 而且register变量可能不存放在内存中,所以不能用取址运算符“&”

来获取register变量的地址。

1.3,最名不符实的关键字----static

不要误以为关键字static很安静,其实它一点也不安静。这个关键字在C语言里主要有

两个作用,C++对它进行了扩展。1.3.1,修饰变量

第一个作用:修饰变量。变量又分为局部和全局变量,但它们都存在内存的静态区。

静态全局变量,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法

使用他。准确地说作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些

代码行也不能使用它。想要使用就得在前面再加extern ***。恶心吧?要想不恶心,很简单,

直接在文件顶端定义不就得了。

静态局部变量,在函数体里面定义的,就只能在这个函数里用了,同一个文档中的其他

函数也用不了。由于被static修饰的变量总是存在内存的静态区,所以即使这个函数运行结

束,这个静态变量的值还是不会被销毁,函数下次使用时仍然能用到这个值。

static int j;

void fun1(void){

static int i = 0;

i ++;

}

void fun2(void){

j = 0;

j++;

}

int main()

{

for(k=0; k<10; k++)

{

fun1();

fun2();

}

return 0;

}

i和j的值分别是什么,为什么?

1.3.2,修饰函数

第二个作用:修饰函数。函数前加static使得函数成为静态函数。但此处“static”的含义

不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函

数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件

中的函数同名。

关键字static有着不寻常的历史。起初,在C中引入关键字static是为了表示退出一个

块后仍然存在的局部变量。随后,static在C中有了第二种含义:用来表示不能被其它文件

访问的全局变量和函数。为了避免引入新的关键字,所以仍使用static关键字来表示这第二

种含义。

当然,C++里对static赋予了第三个作用,这里先不讨论,有兴趣的可以找相关资料研

究。

1.4,基本数据类型----short、int、long、char、float、double

C语言包含的数据类型如下图所示:数值类型

基本类型

构造类型

指针类型

空类型void

短整型short

整型int

长整型long

单精度型float

数组

结构体struct

浮点型

双精度型double

字符类型char

共用体union

枚举类型enum

C

1.4.1,数据类型与“模子”

short、int、long、char、float、double这六个关键字代表C语言里的六种基本数据类型。

怎么去理解它们呢?举个例子:见过藕煤球的那个东西吧?(没见过?煤球总见过吧)。那个

东西叫藕煤器,拿着它在和好的煤堆里这么一咔,一个煤球出来了。半径12cm,12个孔。

不同型号的藕煤器咔出来的煤球大小不一样,孔数也不一样。这个藕煤器其实就是个模子。

现在我们联想一下,short、int、long、char、float、double这六个东东是不是很像不同

类型的藕煤器啊?拿着它们在内存上咔咔咔,不同大小的内存就分配好了,当然别忘了给

它们取个好听的名字。在32位的系统上short咔出来的内存大小是2个byte;int咔出来的

内存大小是4个byte;long咔出来的内存大小是4个byte;float咔出来的内存大小是4个byte;double咔出来的内存大小是8个byte;char咔出来的内存大小是1个byte。(注意这里指一

般情况,可能不同的平台还会有所不同,具体平台可以用sizeof关键字测试一下)

很简单吧?咔咔咔很爽吧?是很简单,也确实很爽,但问题就是你咔出来这么多内存块,

你总不能给他取名字叫做x1,x2,x3,x4,x5...或者长江1号,长江2号...吧。它们长得这么像(不

是你家的老大,老二,老三...),过一阵子你就会忘了到底哪个名字和哪个内存块匹配了(到

底谁嫁给谁了啊?^_^)。所以呢,给他们取一个好的名字绝对重要。下面我们就来研究研究

取什么样的名字好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,099评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,473评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,229评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,570评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,427评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,335评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,737评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,392评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,693评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,730评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,512评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,349评论 3 314
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,750评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,017评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,290评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,706评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,904评论 2 335

推荐阅读更多精彩内容

  • 注:这是第三遍读《C语言深度解剖》,想想好像自从大学开始就没读完过几本书,其中谭浩强的那本《C语言程序设计(第四版...
    HavenXie阅读 1,706评论 1 6
  • 第一类:数据类型关键字 1.基本数据类型(5个) void 声明函数无返回值或无参数,声明无类型指针,显式丢弃运算...
    lancely阅读 1,027评论 0 3
  • 天色青了,乌云来了 荷偏着头看天空 静看着雨什么时候落 雨落下来顷刻覆盖大地 荷开心的接着从天而降的小玩意 应接不...
    行思坐忆阅读 186评论 1 1
  • 1.工具-WireShark 2.SIP软电话-MicroSip 3.设置抓包过滤条件 4.使用MicroSIP连...
    青岛小鱼儿阅读 3,788评论 0 0
  • 最近在学习混合开发,毕竟大势所趋 ,在这里记录一下自己的学习过程吧。 Cordova提供了一组设备相关的API,通...
    星落尘阅读 425评论 0 0