10. goto 关键字
一般来说,编码的水平与 goto 语句使用的次数成反比。
个人主张,禁用 goto 语句。
11. void 关键字
1、void 修饰函数返回值和参数
1> 如果函数没有返回值,那么应将其声明为void 类型。2> 如果函数无参数,那么应声明其参数为void
2、void 指针
1> 不能对void 指针进行算法操作2> 如果函数的参数可以使任意类型指针,那么应声明其参数为 void*
3、void不能代表一个真实的变量
12. return 关键字
return 用来终止一个函数 并 返回其后面跟着的值。
return (Val); // 此括号可以省略,但一般不省略,尤其在返回一个表达式的值时;
注: 1> 一个函数内可以有多个 return 语句,但只有一个 return 语句被执行
2> return 语句不可返回指向 "栈内存" 的 "指针", 因为该内存在函数结束时被自动销毁。
13. const 关键字
1、const 修饰的只读变量
定义 const 只读变量,具有不可变性。注: const 修饰的只读变量必须在定义的同时初始化。
2、节省空间,避免不必要的内存分配,同时提高效率
编译器通常不为普通 const 只读变量分配内存空间,而是将他们保存在符号表中,这使得他成为一个编译器期间的值,没有了存储与读内存的操作,使得它的效率也很高。
3、修饰一般变量
int const i = 2; 或 const int i = 2;
4、修饰数组
只读数组: int const a[5] = {1,2,3,4,5};const int a[5] = {1,2,3,4,5};
5、修饰指针
const int *p;
// p可变, p指向的对象不可变int const *p;
// p可变, p指向的对象不可变int *const *p;// p不可变, p指向的对象可变
const int *const *p;// 指针p和p指向的对象都不可变
6、修饰函数的参数
当不希望参数值在函数体内被意外改变时使用。例: void Fun(const int i);
7、修饰函数的返回值
1> const 修饰符也可以修饰函数的返回值,返回值不可被改变。例: const int Fun(void);
2> 在另一连接文件中引用 const 只读变量
extern const int i;// 正确的声明
extern const int j = 10;// 错误,只读变量的值不能改变
14. volatile 关键字
volatile 是易变的、不稳定的意思。
volatile 关键字 和 const 一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素改变,比如操作系统、
15. extern 关键字
当引用另一个文件中定义的变量或函数时,使用 extern 进行声明
16. struct 关键字
struct 是一个神奇的关键字,它将一些相关联的数据打包成一个整体,方便使用。
1、结构体的大小
2、柔性数组
17. union 关键字
union 关键字的用法与 struct 的用法非常类似。
union 维护足够的空间来放置多个数据成员中的 "一种",而不是为每个数据成员配置空间。在union中所有的数据成员公用一个空间,同一时间只能存储其中一个数据成员,所有的数据成员具有相同的起始地址。
18. enum 关键字
枚举 与 #define 宏的区别
1> #define 宏常量是在预编译阶段进行简单替换; 枚举常量则是在编译的时候确定其值
2> 一般在编译器里,可以调试枚举常量,但不能调试宏常量。
3> 枚举可以一次定义大量相关的常量,而#define 宏 一次只能定义一个。
19. typedef 关键字
注意typedef 与 #define 的区别
#define INT32 int
unsigned INT32 i = 10;// 正确
typedef int int32;
unsigned int32 j = 10;// 编译错误