1.标识符
标识符由字母数字构成,必须由字母开头;
下划线_算作字母,但不要用下划线作为标识符的首字母,因为库中通常用下划线作为标识符首字母,你如果这样用容易引起冲突;
标识符是区分大小写的,int A和int a代表不同的变量;
关键字不能用作标识符;
C语言区分内部名和外部名,内部名仅出现于定义改名称的文件,必须是能由前31个字符进行区分;
外部名是全局变量和非static函数名,这将涉及到汇编器和加载器,需要必须前6个字符能够进行区分,而且不区分大小写。
2.数据类型
c语言定义了四种基本数据类型:char, int, float, double。
char是字符型,占用一个字节的存储空间,也是一种整型;
int是整型,通常占用一个机器字的长度,即16位机器是2字节长,32位机器是4字节长度;
float是单精度浮点型;
double是双精度浮点型;
C引入了修饰符,主要包括signed, unsigned, short, long, 这几个修饰符会影响到变量的存储空间和取值范围。
signed和unsigned用来修饰整型,分别代表有符号和无符号,有符号表示有正负之分,无符号型只能取0和正数。
可以用来修改char,signed char取值范围是-128~127,unsigned char取值范围是0~255;
如果只声明char类型,则到底是signed char还是unsigned char,需要依赖于具体机器。
signed和unsigned也可以用来修饰int, short, long型。
short只能用来修饰int, 即short int,通常缩写为short;
long可以用来修饰int和double, long int可以缩写为long;
3.常量
C语言整数有三种表示方法,十进制、八进制和十六进制。
八进制整数以0开头,如020,代表十进制的16;
十六进制整数以0x或0X开头,如010,代表十进制16。
通常常量的类型可以通过其数值大小来确定,如一个常量超过了int型的取值范围,就会使用long型;
也可以通过后缀的方式指定常量类型:
l或L 长整型
u或U 无符号整型
ul或UL 无符号长整型
f或F float型
可以通过const关键字来声明常量,该常量不允许修改。
枚举也可以定义常量。
enum bool { FALSE, TRUE };
enum元素从0开始计数,依次递增,但可以手动指定某一个元素的值,各个元素的值可以允许相同,但名字不能相同。
enum相比#define宏定义的优势是允许调试时输出可以是enum元素的名称。
4.算术运算符
+
-
*
/
%
结合顺序是自左至右。
5.关系运算符和逻辑运算符
关系运算符:
<
<=
>
>=
==
!=
逻辑运算符:
&&
||
!
&&和||涉及短路的问题,即&&左侧的值为假和||左侧值为真时,则不进行后续计算;
6.自增和自减
++
--
++和--有前缀和后缀之分,前缀是在取值前先进行自增或自减操作;后缀是在取值后再进行自增或自减操作;
7.位操作符
位操作符仅能用于整型。
&
|
!
>>
<<
8.条件表达式
条件表达式是C语言唯一一个三元操作符。
expr1 ? expr2 : expr3
首先计算expr1的值,若为真,则计算expr2,否则,计算expr3;
9.赋值运算符
=
复合赋值运算符
+=、-=, *=, /=
这些运算符代表的含义如下:
a += 1 等价于 a = a + 1
a += y + 1 等价于 a = a + (y + 1)
10.类型转换
11.运算符优先级及结合性