大一时学c语言,总结的一些自己感觉很零碎且容易忘的知识点,不对之处请指正
1、字符串不管中间是否有数值0,结尾一定有数值0
2、浮点类型的变量存储并不精确
3、printf格式串自动右对齐,加负号左对齐
4、scanf格式串的空格可与输入的任意空格匹配,包括0个
5、负数i%j结果符号与i相同
6、i*=j+k等同与i=i*(j+k)
7、fmod函数可用于浮点数取余
8、自增自减可用于浮点数
9、else遵循就近原则
10、switch比if执行速度快
11、switch后只能跟整形表达式,不能是浮点数和字符串
12、case后只能是整数或字符
13、可以把多个case放置在同一行
14、标号前可以不加case
15、三元运算符遵循类型转换
16、for语句可声明多个变量,但类型必须是相同类型
17、break可用于switch和循环,continue只能用于循环
18、goto必须和标号后的语句处于同一个函数
19、goto的标号后必须有语句,如果没有,可用空语句解决
20、类型的说明符顺序没有影响
21、加0表示8进制,0x表示16,读写用o是八进制,x是十六进制
22、double类型,scanf用lf,printf可用lf,但l不起作用
23、可用signed或unsigned修饰char类型
24、ctype.h中的toupper可讲小写转换成大写
25、sizeof应用于表达式可不加括号,转换说明用lu
26、数组从0开始,出于不对称和运算速度考虑
27、数组元素可能被多次初始化
28、函数不能直接返回数组
29、函数可以有多条return语句,返回调用点
30、传递数组,不加方括号
31、二元数组只能省略第一维
32、(int[]){……}/(struct part){……}复合字面量
33、return后不跟表达式,可出现在void函数中
34、exit函数在stdlib库中
35、exit在哪个函数中都会终止程序,return只能在main函数会终止程序
36、函数定义不能嵌套,可以放另一个函数声明
37、指针可以和其他变量一块声明
38、相同类型指针可以赋值
39、向scanf误传入变量的值,会被当成地址
40、指针可用%p显示
41、int * const p保护p的对象,const int * p保护p,const int * const p同时
42、++优先级高于*,++运算符的副作用容易引起错误
43、指针可以进行取下标操作
44、可改变类型的声明必须在函数或函数原型中
45、sizeof(a)中,a为数组大小,不是指针大小
46、字符串字面量后面加\,可以在下一行延续
47、printf中多个字符串字面量可以合并成一个
48、字符串字面量可以取下标
49、strlen包括空格,不包括结尾字符0,第一个空字符前字符个数
50、sizeof计算字符串大小,即使字符串中间有字符0,也计算整个长度
51、字符数组可以改,字符指针不可以改
52、puts会自动添加换行符
53、scanf读取字符串会在开始前跳过空白字符,gets不会
54、gets直到换行符停止,忽略掉换行符,scanf在空白符停止
55、用strcpy为字符数组赋值
56、可以printf(字符串),只是如果字符串有%会作为转换说明的开始
57、编写开头:#ifdef+#define+……+#endif
58、预编译要想换行必须在末尾使用/
59、预编译指令中可以插任意空格或制表符,指令可以出现在任何地方
60、宏定义中的替换列表可以为空。带参数的宏参数可以为空,调用的参数也可以为空
61、带参数的宏的名字与参数列表错括号之间没有空格
62、#可以独占一行,作为空指令
63、头文件只放声明,不放定义,放结构、函数、宏定义
64、结构可以用=复制
65、可以返回指向static变量的指针
66、静态存储期限的变量默认是0,static、extern、外部变量
67、register变量不能用&
68、const对象不能用于常量表达式
69、静态存储期限的变量的初始化式必须是常量
70、不是static的复合数据结构初始化式可以是变量
71、测试赋值表达式的值就是测试赋值的值
72、格式串左对齐会就一个空给正负号
73、多维数组初始化可以省略最左边的下标
2、浮点类型的变量存储并不精确
3、printf格式串自动右对齐,加负号左对齐
4、scanf格式串的空格可与输入的任意空格匹配,包括0个
5、负数i%j结果符号与i相同
6、i*=j+k等同与i=i*(j+k)
7、fmod函数可用于浮点数取余
8、自增自减可用于浮点数
9、else遵循就近原则
10、switch比if执行速度快
11、switch后只能跟整形表达式,不能是浮点数和字符串
12、case后只能是整数或字符
13、可以把多个case放置在同一行
14、标号前可以不加case
15、三元运算符遵循类型转换
16、for语句可声明多个变量,但类型必须是相同类型
17、break可用于switch和循环,continue只能用于循环
18、goto必须和标号后的语句处于同一个函数
19、goto的标号后必须有语句,如果没有,可用空语句解决
20、类型的说明符顺序没有影响
21、加0表示8进制,0x表示16,读写用o是八进制,x是十六进制
22、double类型,scanf用lf,printf可用lf,但l不起作用
23、可用signed或unsigned修饰char类型
24、ctype.h中的toupper可讲小写转换成大写
25、sizeof应用于表达式可不加括号,转换说明用lu
26、数组从0开始,出于不对称和运算速度考虑
27、数组元素可能被多次初始化
28、函数不能直接返回数组
29、函数可以有多条return语句,返回调用点
30、传递数组,不加方括号
31、二元数组只能省略第一维
32、(int[]){……}/(struct part){……}复合字面量
33、return后不跟表达式,可出现在void函数中
34、exit函数在stdlib库中
35、exit在哪个函数中都会终止程序,return只能在main函数会终止程序
36、函数定义不能嵌套,可以放另一个函数声明
37、指针可以和其他变量一块声明
38、相同类型指针可以赋值
39、向scanf误传入变量的值,会被当成地址
40、指针可用%p显示
41、int * const p保护p的对象,const int * p保护p,const int * const p同时
42、++优先级高于*,++运算符的副作用容易引起错误
43、指针可以进行取下标操作
44、可改变类型的声明必须在函数或函数原型中
45、sizeof(a)中,a为数组大小,不是指针大小
46、字符串字面量后面加\,可以在下一行延续
47、printf中多个字符串字面量可以合并成一个
48、字符串字面量可以取下标
49、strlen包括空格,不包括结尾字符0,第一个空字符前字符个数
50、sizeof计算字符串大小,即使字符串中间有字符0,也计算整个长度
51、字符数组可以改,字符指针不可以改
52、puts会自动添加换行符
53、scanf读取字符串会在开始前跳过空白字符,gets不会
54、gets直到换行符停止,忽略掉换行符,scanf在空白符停止
55、用strcpy为字符数组赋值
56、可以printf(字符串),只是如果字符串有%会作为转换说明的开始
57、编写开头:#ifdef+#define+……+#endif
58、预编译要想换行必须在末尾使用/
59、预编译指令中可以插任意空格或制表符,指令可以出现在任何地方
60、宏定义中的替换列表可以为空。带参数的宏参数可以为空,调用的参数也可以为空
61、带参数的宏的名字与参数列表错括号之间没有空格
62、#可以独占一行,作为空指令
63、头文件只放声明,不放定义,放结构、函数、宏定义
64、结构可以用=复制
65、可以返回指向static变量的指针
66、静态存储期限的变量默认是0,static、extern、外部变量
67、register变量不能用&
68、const对象不能用于常量表达式
69、静态存储期限的变量的初始化式必须是常量
70、不是static的复合数据结构初始化式可以是变量
71、测试赋值表达式的值就是测试赋值的值
72、格式串左对齐会就一个空给正负号
73、多维数组初始化可以省略最左边的下标