c语言关键字及其含义,C语言关键字解析

C语言关键字解析

C语言关键字有32个,如表1所示。虽然简单,但还是让一些初学者犯错,譬如sizeof,好多初学者都认为是函数,其中包括我的一些同学,他们学过有好多年了,如此看来,有时我们追求高深的内容,往往会忽略基础的简单的内容!

表1 C语言标准定义的32个关键字

关键字 意义

auto声明自动变量,缺省时编译器一般默认为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.告诉编译器,这个变量或者函数,我已经定义了(开辟空间了),但是在别的地方,我先说明一下,免得编译器报错。当然,声明可以多次出现。

2.告诉编译器,这个变量名或者对象名,我先预定了,其他地方不可以用了。和在饭馆吃饭(人多)要提前预约一样的道理。

定义和声明最本质的区别在于,声明没开辟空间,而定义则创建对象(变量)并开辟了空间。这是最重要的一点。

一. auto,register,extern,static,四种关键字

C语言说明变量的时,同时给出了两个方面的信息:数据类型和存储类。C语言中提供了存储说明符auto,register,extern,static说明的四种存储类别。

1.auto是变量是C语言最常用的。编译器在默认的缺省情况下,所有变量都是auto的。对于函数的形参,也是auto型的。

2.extern, 语言中存在这样的一种变量,在一个函数中合法出现的同时,又可以在其他的函数中合法出现,这就是外部变量。它的生命周期是整个程序的执行周期。

3.register,寄存器变量,其值存放在寄存器中,访问速度快。有最快的关键字的称呼。虽然寄存器的速度非常快,但是使用register修饰符也有些限制的:register变量必须是能被CPU寄存器所接受的类型。意味着register变量必须是一个单个的值,并且其长度应小于或等于整型的长度。而且register变量可能不存放在内存中, 所以不能用取址运算符 “&”来获取register变量的地址。

4.static静态变量,两个作用。第一个作用:修饰变量,都存在内存的静态区。

静态局部变量:出现在函数体内,生命周期是整个程序的执行过程,由于被static修饰的变量总是存在内存的静态区,即使该函数生命结束,其值不会被销毁,同样要修改该变量,就要到函数内部完成,所以用起来比较安全,起到信息屏蔽的作用。

静态全局变量:出现在函数体外,作用域仅限于变量被定义的文件中,其他文件即使用extern声明也没法使用他。

第二个作用,修饰函数,函数前加static使得函数成为静态函数。但此处“static”的含义不是指存储方式,而是指对函数的作用域仅局限于本文件(所以又称内部函数)。使用内部函数的好处是:不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。

二.基本数据类型----short、int、long、char、float、double这些关键字都是基本的数据类型,每种类型占据的内存空间不一样,其实每种类型相当于一个模型,再通俗点就是一个模子。具体占多少个字节,可以用关键字sizeof去测一下。另外就就是存储问题。不论是float还是double在存储方式上都遵从IEEE的规范,float遵从的是IEEE R32.24 ,而double遵从的是R64.53。#include int main(){float a=999.999;float b=0.005;printf("%lf/n",a+b-1000.004);return 0;}看看得到的结果并不是0,按数学计算本来应该是0,但由于浮点数的存储有微小的误差从而导致计算结果不是0double m=3.3;cout<

部分内容参考了陈正冲 《C语言深度解剖》。

还有这个网站上关于字节对齐写得不错,可以看看!

你可能感兴趣的:(c语言关键字及其含义)