1:没有显式说明情况下,enum类型中第一个枚举名的值为0,第二个为1,后面成递增趋势,也可以指定部分枚举名的值,而后面依然递增
2:不同枚举中的名字必须互不相同,同一枚举中不同的名字可以具有相同的值
3:如果变量不是局部变量,那么只能初始化一次,而且初始化表达式必须是常量表达式
4:每次进入函数,显式初始化的自动变量都被初始化一次,初始化表达是可以是任意表达式
5:默认情况下,外部变量和静态变量将被初始化为0,未经显式初始化的自动变量为未定义值
6:const限定的变量的值不能改变,对于数组则数组中的所有元素的值都不能修改
7:const也可以配合数组参数使用:表示函数不能修改数组元素的值:int strlen(const char[]);
8:整数除法会截断结果的小数部分
9:取模运算不能用于float和double型
10:算术运算符:同一优先级从左往右结合 优先级:一元运算符([正、负])>二元运算符([乘、除、取模]>[加、减]),中括号里的属于同一优先级
11:关系元算符优先级低于算术运算符,优先级:[等于、不等于] >[大于、大于等于、小于、小于等于]
12:逻辑运算符:&& 和|| 左结合 优先级:&& > || 二者都比关系运算符低
13:!= 优先级高于赋值运算符 =
14:在关系表达式中和逻辑表达式中,如果关系为真,则表达式的结果值为1,如果为假,则表达式的结果值为0
15:逻辑运算符!的作用是将非0的操作数转换为0,将操作数0转换为1,用于类似结构:if(!valid) (如果不是有效的)
16:自动转换是将 比较窄的操作数转换为比较宽的操作数,并且不丢失信息的转换
17:表达式中float类型操作数不会自动转换为double型
18:当较长的整数转换为较短的整数或者char类型时,超出的高位部分将被丢弃
19:由于函数传递的参数是表达式,所以把参数传递给函数的时候也可能进行类型转换,在没有函数原型的情况下,char和short都被转换为int类型,float类型将被转换为double类型,因此即使被调函数的参数是char或者float型,我们也把函数声明为int或者double类型
20:通常情况下,参数是通过 函数原型声明的,这样函数被调用时,声明将对参数进行强制转换
21:自增自减运算符只作用于变量,(i+j)++是非法的
22:赋值运算符:op= 简洁便于理解,产生高效代码
23:条件运算符优先级很低仅高于赋值运算符: expr1 ? expr2 : expr3 ............z = (a > b) ? a : b; /* z = max(a, b) */