ASCII编码的字符一共128个,对应十进制码值为[0, 127],其中需要记住的是,字符’0’的ASCII码为48,字符’A’的ASCII码为65,字符’a’的ASCII码为97,然后就可以推算所有数字、大小写字母的ASCII码
1、字符’0’数值为48(ASCII码为48)
2、字符’\0’数值为0(加上转义符表示其就是数值0,区别于字符’0’)
3、布尔字面量false(用%d打印时,false打印为0,true打印为1;赋值给bool变量和用在判断语句中时,0解释为false,非0解释为true)
4、宏定义NULL数值为0(被宏定义为0,等价于0)
5、指针字面量nullptr可以转换成任何指针类型和bool(转换为bool是false),但是不能转换为int,但是可以用%d打印为0
memset按字节赋值,通常只能用来对int数组赋初值0和-1,因为整数0的二进制是全0,整数-1的二进制是全1,不过如果某个int整数每个字节都是一样的,也是可以用memset赋初值的
在C/C++中,对于int类型整数,通常将正无穷大定义为0x3f3f3f3f,负无穷大定义为0xc0c0c0c0,好处是:
(1)无穷大 $\times$ 2不会溢出,那么可以对无穷大进行一些四则运算而不用担心溢出
(2)可以用memset将数组arr全部初始化为无穷大,因为memset是按字节赋值的,每个int整数占4个字节,所以将4个字节定义为相同才能使用memset赋值
memset(arr, 0x3f, sizeof(arr));
memset(arr, 0xc0, sizeof(arr))
定义在函数内的变量被分配在栈区,栈区内存较小,只有几M大小,未显式初始化时,其值不确定;
定义在函数外的变量被分配在堆区,堆区内存较大,多达几G大小,未显式初始化时,其值被初始化成数值为0的数据(char是’\0’,bool是false,指针是NULL)
可以尽量把数组定义在函数外,一方面堆区内存大,方便大数组存储,另一方面可以帮我们默认初始化,不需要手动显式初始化
1、C字符串转换为C++ string,直接赋值;
2、C++ string转换为C字符串,调用string的c_str()
方法;
(虽然刷题时尽量使用C风格字符串,但还是不可避免要用到string,比如sort不能对C风格字符二维数组,也就是C风格字符串的数组,进行排序,但却可以对C++的string数组排序,如果要对字符串数组按字典序排序就要转换为string)
1、不要在循环中写size()
方法,最好事先把size
算出来,避免每次循环都计算
2、传引用通常比传值要快