1、数据类型相关的关键字
用于定义变量或者类型:char、short、int、long、float、double、struct、union、enum、signed、unsigned、void。
1.1、char 字符型,用char定义的变量是字符型变量,占1个字节。
1.2、short短整型,使用short定义的变量是短整型变量,占2个字节。
1.3、int整型,用int定义的变量是整形变量,在32位及64位系统下占4个字节,16位平台下占2个字节。
1.4、long长整型,用long定义的变量是长整型的,在32位系统下占4个字节,在64位系统下占8个字节。
1.5、float单浮点型(实数),用float定义的变量是单浮点型的实数,占4个字节。
1.6、double双浮点型(实数),用double定义的变量是双浮点类型的实数,占8个字节。
1.7、struct关键字是与结构体类型相关的关键字,可以用它来定义结构体类型。
1.8、union关键字是与共用体(联合体)相关的关键字。
1.9、enum是与枚举类型相关的关键字。
1.10、signed 有符号的意思;在定义char、整形数据的时候用signed修饰,表示定义的数据是有符号的,可以表示正数也可以表示负数。
1.11、unsigned 无符号的意思;在定义char、整形数据的时候用unsigned修饰,表示定义的数据是无符号,只能保存正数和0。
1.12、void空类型的关键字;void不能定义变量,是用来修饰函数的参数或者返回值,代表函数没有参数或返回值。
2、存储相关关键字
2.1、register 是寄存器的意思,用register修饰的变量是寄存器变量。即:在编译的时候告诉编译器这个变量是寄存器变量,尽量将其存储空间分配在寄存器中。注意:(1)、定义的变量不一定真的存在寄存器中。(2)、cpu取数据的时候去寄存器中拿数据比去内存中快。(3)、因为寄存器比较宝贵,所以必能定义寄存器数组。(4)、register只能修饰字符型和整型变量,不能修饰浮点型。(5)、因为register修饰的变量可能存放在寄存器中不存放在内存中,所以不能对寄存器变量取地址。因为只有存放在内存中的数据才有地址。
2.2、static 是静态的意思。可以修饰全局变量、局部变量、函数。使用static修饰的变量,保存在内存的静态区空间中。
2.3、const 是常量的意思。用const修饰的变量是只读的,不能再去修改变量的值。const也可以用来修饰指针。
2.4、extern 是外部的意思,一般用于函数和全局变量的声明。
3、其他关键字
3.1、sizeof 用来测变量、数组的占用空间的大小(字节数)。
3.2、typedef 重命名相关的关键字。作用是给一个已有的类型,重新起个类型名,并没有创造一个新的类型。
typedef short int INT16;
3.3、volatile 易改变的意思。用volatile定义的变量是易改变的。即告诉cpu每次用volatile变量的时候,重新去内存中取保证用的是最新的值,而不是寄存器中的备份。现在较少使用。
4、格式化输出字符
%d:十进制有符号整数
%ld:十进制long有符号整数
%u:十进制无符号整数
%o:以八进制表示的数。%#o可以输出8进制的前导符
%x:以十六进制表示的数。%#x可以输出16进制的前导符
%f:float型浮点数
%lf:double型浮点数
%e:指数形式浮点数
%c:单个字符
%s:字符串
%p:指针的值
特殊使用:%3d表宽度为3不足前面空格补齐,%03d表宽度为3不足前面0补齐,%-3d表宽度为3不足后面空格补齐,%.2f表保留小数点后两位
5、类型转换
数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。
5.1、自动类型转换:占用内存字节数少(值域小)的类型,向占用字节数多(值域大)的类型转换,以保证精度不降低。
1):当表达式中出现了char、short、int、int类型中的一种或多种,没有其他类型。参加运算的成员全部变成int类型的参加运算,结果也是int类型。
2):当表达式中出现了带小数点的实数,参加运算的成员全部变成double类型的参加运算,结果也是double类型。
3):当表达式中有有符号数,也有无符号数,参加运算的成员变成无符号数参加运算,结果也是无符号数。(表达式中无实数)
4):在赋值语句中等号右边的类型自动转换为等号左边的类型。
5):注意自动类型转换都是在运算过程中进行临时性的变换,并不会影响自动类型转换的变量的值和类型。
5.2、 强制类型转换 通过类型转换运算来实现 (类型说明符)(表达式)
把表达式的运算结果强制转换成类型说明符所表示的类型。
6、逗号运算符
(...,...,...)使用逗号隔开的表达式,从左向右依次执行,最后的表达式的值是整个运算结果。例如A=(B,C,D),会先运行B再运行C再运行D,把D的值赋给A。