
ASCII 转义写法\141八进制 141 → 十进制 97 → ASCII a\x30十六进制 30 → 十进制 48 → ASCII 0printf(%c\n, \141); //8进制转十进制 为97 对应a printf(%c\n, \x30); // 16进制转十进制为48 对应0转义字符 \ 转义小总结1\t → Tab 制表2\b → 退格3\xxx → 八进制转义\后跟数字4\\ → 打印出一个普通反斜杠\5strlen统计\0之前有效字符数量不包含结束符\0例子求字符串的长度求该字符串的长度 c:\test\bit\113.ca) \t 是转义字符 算一个字符b) \b 是转义字符 算一个字符c) \113 是转义字符 算一个字符\0是字符串的结束标志strlen在求字符串长度的时候统计的是\0之前字符的个数//求一个字符串的长度 int len strlen(abc); //string len printf(%d\n, len); // \0 是字符串的结束标志strlen在统计字符串长度的时候统计的是\0 之前的字符串个数 int len1 strlen(c:\test\bit\113.c); printf(%d\n, len1);布尔类型0表示假1表示真bool flag false; //0 表示假1表示真 if (flag) { printf(haha\n); } else { printf(hehe\n); }sizeof 操作符sizeof是⼀个关键字也是操作符专⻔是⽤来计算sizeof的操作符数的类型⻓度的单位是字节。sizeof的计算结果是size_t类型的。sizeof操作符的操作数可以是类型也可是变量或者表达式。sizeof后边的表达式是不真实参与运算的根据表达式的类型来得出⼤⼩。size_t用来统一表示 sizeof 的返回值类型sizeof里面的表达式不会执行short s 2; int b 10; printf(%d\n, sizeof(s b1)); printf(s %d\n, s);sizeof 是求数据类型的大小不会因数据的变化而改变数据类型的大小signed 和 unsignedsigned关键字表⽰⼀个类型带有正负号包含负值unsigned 关键字表⽰该类型不带有正负号只能表⽰零和正整数。%d有符号 int正常打印正负、0%u无符号 unsigned int只打印非负数字//有符号数 用%d 可以打印正负数以及0 signed int a 10; printf(%d\n, a); a -20; printf(%d\n, a); a 0; printf(%d\n, a); // 无符号数 只能打印大于0的数 unsigned int b 12; printf(%u\n, b);全局变量和局部变量全局变量和局部变量在内存中的存储地方1局部变量是放在内存的栈区2全局变量是放在内存的静态区3堆区是⽤来动态内存管理的变量初始化核心知识点1局部变量a位置栈区b自动初始化不会自动初始化为 0c 如果只声明不赋值内存里是栈遗留的随机垃圾值d直接使用属于未定义行为结果随机每次运行可能不一样e局部变量定义时手动初始化int a 0;2static 修饰的局部变量a位置静态区全局数据区b生命周期程序整个运行周期函数结束不销毁c 自动初始化不赋值默认就是 0只初始化一次void test(){ static int a; printf(%d,a); //输出0 }3全局变量a位置静态区b自动初始化不写 0默认自动初始化为 0c 生命周期整个程序int g_num; //全局默认0 int main(){ printf(%d,g_num); //打印0 return 0; }总结面试高频考点a只有静态区的变量才会自动清零栈区不会bstatic 改变局部变量的存储位置、生命周期不改变作用域只能本函数内使用。c 局部变量要手动初始化全局变量和局部变量补充代码块可以访问外部全局变量int a 100; int main() { printf(%d\n, a); { printf(%d\n, a); } return 0; }当代码块内部没有定义变量 a时编译器会向外层作用域查找最终找到全局变量 a其值为 100。{ }表示一个代码块也称为复合语句变量屏蔽 / 就近原则//变量屏蔽 int a 100; int main() { { //全局变量和局部变量同名时局部变量优先 int a 10; printf(%d\n, a); } return 0; }局部变量和全局变量同名的时候局部变量优先使用大括号{ }内部定义了局部变量int a 10在这个大括号范围内局部 a 优先把全局的 a 屏蔽掉