C语言部分关键字
void 、 char 、 int、float、 double、 short、long、signed、unsigned、struct、union、
enum 、 typedef、sizeof、auto、static、register、extern 、const、volatile、return
continue、break、goto、if、else、switch、case、default、for、do、while
union:共用体
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
//方式1 先定义共用体,再创建变量, union data{ int n; char ch; double f; }; union data a,b,c; //方式2 也可以在定义共用体的同时创建变量 union data{ int n; char ch; double f; }a,b,c; //方式3不再定义新的变量,也可以将共用体的名字省略 union{ int n; char ch; double f; } a, b, c;
enum :申明枚举
//关键字+枚举类型的名字 enum typeName { valueName1, valueName2, valueName3, . . . }; //举例 enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
//也可以在定义枚举类型的同时定义变量:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;
typedef与define是给对象起另外的名字,主要为了简化程序和增强可读性
typedef:申明类型名称,在编译时处理,有类型检查功能。它在自己的作用域内给一个已经存在的类型一个别名,但不能在一个函数定义里面使用typedef。
如:typedef int (pfun)(int,int) 加上typedef会由函数指针变量变为函数指针类型。
#define不只是可以为类型取别名,还可以定义常量、变量、编译开关等
define:是预处理指令,也称作宏定义,在预处理时进行简单而机械的字符串替换,不作正确性检查,没有作用域的限制,
#define INTPTR1 int* typedef int* INTPTR2;
典型错误用法
//带分号 #defineN 100; //定义指针类型 #define pin (int*) pin a,b; int* a,b; /*本意是a和b都是int型指针,但是实际上变成int* a,b;a是int型指针,而b是int型变量。这是应该使用typedef来代替define,这样a和b就都是int型指针了。*/
static与const
static:
1、修饰局部变量--存放在静态存储区,生命周期是整个程序结束。
2、修饰函数和全局变量--限制该全局变量或者函数的作用域仅限于本文件
特点:
a、记忆性:在第二次调用进入时, 能保持第一次调用退出时的值.,造成不同时刻至运行的结果可能不同.
b、生存期:全局性和唯一性,每次调用时,都指向同一块内存,这就造成一个很重要的问题,不可重入性。
优点:
不用担心自己定义的函数,是否会与其它文件中的函数同名。
const:定义常量,常量的值不能改变
优点:
1、可以保护被修饰的东西,防止意外修改,增强程序的健壮性
const int n=5;等同于 int const n=5;
//常量指针是指针指向的内容是常量,可以有一下两种定义方式 const int * n; int const * n; //指针常量是指指针本身是个常量,不能在指向其他的地址 int *const n;
volatile:精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;