可能很多向我这样的初学者都不知道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,for,goto,sizeof. 定义和声明的最重要的区别:定义创建了对象并为这个对象分配了内存,声明没有分配内存。 1.最宽宏大量的关键字:auto,在缺省情况下,编译器默认所有变量都是auto 2.最快的关键字:register 这个关键字请求编译器尽可能的将变量存在CPU内部寄存器中,而不是通过内存寻址访问以提高效率。但是CPU的寄存器数量有限,所以我们只能定义少量的register变量。使用register修饰符的注意点:register变量可能不存在内存中,所以不能用取地址符&来获取register变量的地址。register变量必须是一个单个值,并且其长度应小于或等于整型的长度。 3.最名不符实的关键字:static 静态全局变量作用域是从定义之处开始,到文件结尾处结束静态局部变量在函数体里面定义的,只能在这个函数体里面使用,由于static修饰的变量总是在内存的静态区,所以即使这个函数运行结束,这个静态变量的值也不会被销毁,函数下次使用时仍然能用到这个值。 静态函数:不是指存储方式,而是指对函数的作用域仅限于本文件,这样的话,不同的人编写函数时,不用担心自己的函数会与其他文件中的函数同名. 4.const关键字也许该被替换为readonly:const修饰的是只读变量,const定义的只读变量在程序运行过程中只有一份备份(因为它是全局的只读变量,存放在静态区)。const修饰谁,谁就不能被改变。例如在修饰指针的时候 const int *p //p可变,p指向的对象不可变 int const *p //p可变,p指向的对象不可变 int *const p //p不可变,p指向的对象可变 const int * const p //p不可变,p指向的对象也不可变 记忆方法: 先忽略类型名(编译器解析的时候也是忽略类型名),我们看const离哪个近,“近水楼台先得月”,离谁近就修饰谁。