C语言深入剖析阅读笔记1--32个关键字
C语言的32个关键字
1.register--最快的关键字
这个关键字请求编译器尽可能地将变量存在CPU内部而不是通过内部寻址以提高效率。
近水楼台先得月,寄存器其实就是一块一块小的存储空间,处于内存和CPU之间,注意register变量必须是能被CPU寄存器接受的类型。
-
修饰变量,静态全局变量,作用域仅限于变量被定义的文件之中,且其他文件即使用extern声明也不行;静态局部变量,不会销毁
-
修饰函数,指对函数的作用域仅限于本文件
-
C++中有第三个用法
3.基本数据类型--short、int、long、char、float、double
-
决定内存分配的大小
-
变量的命名规则
-
不同类型数据之间要注意精度扩展问题,一般低精度数据将向高精度数据扩展
4.sizeof--最冤枉的关键字
计算变量所占空间大小时可以省略括号,计算类型(模子)大小不可省略,一般不省略。
5.signed、unsigned
顾名思义,一个存符号,一个不存(默认正数),其值表示法范围不同,编译器缺省默认情况下数据为signed类型的。
6.if、else注意
-
bool变量与“零值”的比较:if(test) or if(!test)
-
float变量与“零值”的比较:if(test >= -EPSINON) && if(test <= EPSINON) // 用精确度
-
指针变量与“零值”的比较:if(NULL == p) or if(NULL != p)
-
先处理正常情况,再处理异常情况
7.switch、case组合
-
基本格式,注意default处理
-
case后面只能是整型或字符型的常量或常量表达式
-
排列顺序有讲究
8.break、continue
-
长循环在内层
-
循环要尽可能短,代码清晰
-
嵌套在3层之内
9.goto
禁用!
10.void
-
对函数返回的限定
-
对函数参数的限定:如果函数的参数可以是任意类型指针,那么应声明其参数为viod*
11.return
用来终止一个函数并返回其后面跟着的值,不可返回指向“栈内存”的“指针”,因为该内存在函数体结束时被自动销毁。
12.const--也许该被替换为readolny
精确地说,const修饰的是只读的变量
-
节省空间,避免不必要的内存分配,同时提高效率:const修饰的变量通常保存在符号表中,没有储存和读内存操作。
-
与#define的区别:#define在预编译进行替换且没有类型,后者修饰的只读变量在编译的时候确定值,具有特定值。
-
修饰一般变量和数组,int const a 与const int a一样
-
修饰指针,就近原则,忽略类型不看
-
修饰函数参数:一般是告诉该参数在函数体中不可改变,防止无意修改
-
修饰返回值:表明返回值不可改变
13.volatile--最易变的关键字
暂时了解它和const是类型修饰符,用它修饰的变量可以被某些编译器未知的因素更改,比如操作系统、硬件或者其他线程等。
14.extern--最会带帽子的关键字
extern可以置于变量和函数前,以标示其定义在其他文件中,提示编译器遇到此变量或函数时在其他模板中寻找定义
15.struct
这是一个神奇的关键字,它将相关联的数据打包成一个整体,方便使用
-
平时我们要求函数的参数不超过4个,因为易出错,且与具体CPU有关,这时有一个结构体很方便
-
空结构体的大小为1byte
-
与class关键字的区别:在C++里struct与class可以通用,struct成员默认属性是public,class是private
16.union
与struct的用法极为相似,但union主要用来压缩空间,如果一些数据不可能在同一时间同时被用到,则可以使用union
-
大小端模式
-
用程序确认当前系统的存储模式
17.enum--枚举类型
-
枚举与#define宏的区别:
-
枚举常量在编译时确定其值
-
在一般编译器中可以调试枚举常量,但不能调试宏常量
-
枚举可以一次定义大量相关的常量,宏一次只能定义一个
-
18.typedef--伟大的缝纫师
真正意思是取别名--“将离”,注意给结构体取别名,例如:typedef struct stu{code }str,*pstr;其实是给“struct stu{code}”取了一个别名叫str,同时给“struct stu{code} *”取了一个别名叫pstr。

浙公网安备 33010602011771号