刚面试了个大学生,居然连所有的关键字都不熟悉。。。
特此分类总结下:一共32个关键字。(这里说的是ANSI C标准哈,C99、C11暂且不谈)
关键字的意思是说,这几个单词是有特殊用途的,保留给编译器用,程序员给变量或者函数起名字是不能用这几个单词的。
先来总体介绍下:
第一大类是数据类型类,一共14个:
signed unsigned
char short int long enum
float double
void
uinion struct
typedef
sizeof
第二大类是修饰类,一共6个:
auto
volatile
register
const
static
extern
第三类是流程控制,一共12个
if else
for do while
break continue
switch case default
return goto
变量相关知识点:
- 整型(符号位,补码)
- 枚举类型
- 浮点型(包含小数,对阶)
- 数组类型[](数组的名字)
- 结构体类型(打包价格)
- 联合体类型
- sizeof(衡量占用的空间大小)
- void类型
- 指针类型*
- typedef
然后详细描述下:
最短的数据类型,1个byte就已经可以完整的表达所有ASCII字符,所以一般char类型都是1个byte。char就是character的缩写。(PS,我见过坑爹的系统,例如CSR系列芯片,char型是2个byte)
最基础的数据类型是整型类,整数的英文单词就是 integer,所以缩写为int。
那么用几个byte来表示一个整数呢?一般系统会设置2种或者3种规格,分别是:
- 短整型,对应short
- 整型,对应int
- 长整型,对应long
一般准则是: int的空间不能小于short,int的空间不能大于long。
举例系统A:char占1个byte;short占2个byte;int其实就是short,占2个byte;long占4个byte。
举例系统B:char占1个byte;short占2个byte,int和long一样,都是4个byte。
举例系统C:char占1个byte;short占4个byte,int和short一样都是4个byte,long是8个byte。
这里面没有谁对谁错,和具体的硬件平台设计有关系。所以为不同的硬件平台写代码都要考虑到具体的内存分配,再延伸下就是你的代码的可移植行。这个平台的int是4个byte,移植到int是2个byte的系统上,你代码就可能崩了。
整数呢,又分有符号和无符号,默认是有符号的,所以无符号整数要显示的加上unsigned。
表示整数的类型中还有个很好玩的类型就是enum,全名是enumeration。例如你可以用一个int变量来表示职业,1表示工人,2表示农民,3表示工程师,4表示教师等等等等。但是你这代码怎么阅读,这个人的职业是8,那个人的职业是15?!所以这种情况就用enum来定义,本质上变量的值就是整型,但是代码显示是有意义的单词,而且也会减小笔误的概率。
和整数对应的就是浮点数,float和double也是精度的区别。
还有一种“无类型”的数据类型。例如函数的返回值,函数的参数,都可以设置为void型。也可以作为其他数据类型的中间过度类型。所以void和int一样,也是占用内存空间的。
以上就是C语言全部的基本数据类型。还有2种拓展类型union和struct。前者是把所有成员放在同一个起始地址上,union的空间取决于最大的成员。struct是把所有变量按序排列,struct的空间至少是所有成员占用空间的和。
sizeof:所有数据类型都是占用内存空间的,可以通过sizeof关键字来查看。需要注意的是sizeof在编译时就已经被编译器替换为目标平台上实际占用的空间了,不用等到运行的时候去计算。
typedef:其实就是重命名。
未完待续。