(1)编译器从左向右收集字符,并尽量建立最长的记号
(2)标识符由字母,数字和下划线组成,但首字母必须是字母或下划线
如今编译器能识别63个字母
(3)关键字不能作为普通标识符,但可以作为宏名,预处理发生在翻译之前
(4)常用类型名:char - signed char - unsigned char - int - unsigned- --short(%hd) - long(%ld) - unsigned short - unsigned long - float -
double- long double
(5)整形类型的相关信息记录在limit.h
(6)float:N=+-m*b^+-x
浮点型的表示是近似的,不能使用==和!=运算符比较float和double类型的数据,但可以用差小于ESP来解决
(7)整形常量可以带有后缀,虽然字母大小写任意,用大写比较好
(8)科学计数法:尾数+e or E +-n. n为整数
(9)'\0'表示值为0的字符,通常用于表示一个字符串结束。用来代替0是为了在某些表达式中强调字符性质
(10)在程序中书写字符串时不能直接中途换行——可用\续行
(11)#define定义的标识符没有对应的存储单元,只是在编译前由预处理程序进行简单的文本替换
(12)求值顺序:先看优先级,再看结合性。
单目、条件和赋值运算符的结合性为右结合性
(13)计算含有&&和||的表达式时,只要知道结果的真假,就会停止进一步计算
(14)自增自减运算
后缀++或--的计算有延迟效果,延迟的终止点称为序列点。
序列点:
(1)&& || ?: ,
(2)完整表达式结束时,return表达式,条件表达式之后
(15)s[i++] +=1 and s[i++]=s[i++]+1 前者i自增一次,后者两次
(16)位运算:
&:去除某些位--与需保留位对应的位设置为1,其余为0
| :打开某些位--与需保留位对应的位设置为0,其余为1
^:翻转某些位--与需保留位对应的位设置为0,其余为1
<< 在使用右移运算符时应用无符号类型
(17) 整数提升:char - signed char - unsigned char unsigned short 当所有值可以用int表示时,则转换为int,否则为unsigned
(18) 枚举类型:缺省情况下,第一个枚举常量的值为0,以后每个值比前个值大一
#define一次为一种情况命名,而枚举类型用于给一组相关型的整形常量命名
(19)可以使用%3c的输出方式
(20)EOF在头文件stdio.h中定义为一个符号常量,其值为-1,用作文件结束。“Ctrl+z”输入
(21)puts函数从指定的地址读取字符串输出到标准输出设备,并在串尾输出一个换行符‘\n’
(22) 二进制最高位为1,%d输出相应的负数值,%u输出正数
(23)%f小数部分为6位,多于6位采用四舍五入
%e包括一位非0的整数部分和五位小数部分,采用四舍五入和末位补0
%g将上述转换数据去无效0后比较,输出宽度小的那种形式
(24)printf("abc%n",&x);
printf("x=%d",x);
(25) int max=6;
char s[10]="123456789";
printf("%*c",max,' ');
printf("%*s",2*max,s);
printf("%*s",max,s);
(26)gets函数结尾的换行字符‘\n’被空字符‘\0’所替换,作为文件结束的标志
如果需要输入一个带空白字符的字符串,则必须使用gets函数
(27)scanf函数一直等到输入数据个数达到转换说明个数才开始执行
%s可以跳过空白字符
% *c可以起到滤掉前行输入的换行符的作用
(28)在语法上需要一条语句,而在实际功能上不需要执行任何操作时,可以使用空语句
(29)else 与其前面最靠近的还未配对的if配对
(30)switch的值必须是整型,(字符,枚举),且必须用圆括号(),{}不能省,同一switch语句的case常量必须互不相同。执行相同语句的case可以写成一行,其间可以用空格或制表符分隔,但不能用逗号分隔
(31)for语句每次计算后就进行比较
(32)break在循环中用于退出当前循环
(33)void --return;
(34)在一个程序中,每个外部变量只能在某个文件中定义一次,而外部变量的声明可以出现多次。外部变量的初始化只能出现在定义中
(35)auto:系统为自动变量在栈上分配内存;当退出块时,系统释放其内存
(36)entern和static缺省值为0
(37)外部变量能够被所有函数访问到,没有给函数传递数据的开销,所以提高程序的性能
(38)函数的形参能声明为register,但不能声明为extern和static,并且寄存器变量不能执行取地址运算
(39)数组名具有非左值特性,不能对数组名进行赋值操作
(40)数组大小的说明必须是正整数,并且在编译之前就必须明确
(41)初始化必须从数组中下标为0的元素开始,只能省略最右边连续元素的初值
(42)具有局部变量的数组,如果不初始化,其元素的值是随机的。外部数组和静态数组的缺省值为0
(43)有一种情况,对字符数组初始化的时候,'\0'显示给出
(44)当数组的初值全部给出时,第一维大小的说明可以省略
(45)一维数组,二维数组或者n维数组,当其 作为实际参数时只需给出数组名,而对应的形参则是第一维不给出,其余各维的大小则需给出