文章目录
- 1.C语言常见语法问题
- 1. 字符问题
- 2.c语言的考虑
- 3.C++的思考
- 2.C语言指针和数组问题
- 1.问题表现
- 传入参数会退化为指针
- 2.问题原因
- 3.C++解决方案
- 处理二维数组
- 3. c语言移位问题
- 1.问题表现
- 逻辑右移还是算术右移
- 移位操作位数的限制
- 2.问题原因
- 3.C++中的解决方案
- 4. C语言强制类型转换问题
- 1. 问题表现
- 表现1:siezeOf()无符号
- 表现2:转换后精度问题
- 2. 问题原因
- 3. C++中的解决方案
- 5. C语言整数溢出问题
- 1. 问题表现
- 2. 问题原因
- 3. 解决策略
- 6. C语言字符串问题
- 1. 问题表现
- 2. 问题原因
- 3. C++中的解决方案
- c++字符串标准库的实现
- redis开源库的实现
- 记录字符串长度
- 拼接字符串
- 小结
慕课网
1.C语言常见语法问题
1. 字符问题
2.c语言的考虑
3.C++的思考
2.C语言指针和数组问题
1.问题表现
传入参数会退化为指针
- 解决方案
2.问题原因
3.C++解决方案
处理二维数组
3. c语言移位问题
1.问题表现
逻辑右移还是算术右移
- 都采用无符号,均采用逻辑右移
移位操作位数的限制
2.问题原因
3.C++中的解决方案
4. C语言强制类型转换问题
1. 问题表现
表现1:siezeOf()无符号
- 默认int是有符号值,
sizeof()
函数的结果是无符号值,比较时,会自动类型转为无符号的变量
- 解决措施-尽量避免无符号整数进行比较,先将无符号的整数转为有符号整数
表现2:转换后精度问题
- 解决:整型先转为浮点型,不会丢失精度
- 即,容量小的向上转型,不会丢失精度,反之会
2. 问题原因
3. C++中的解决方案
5. C语言整数溢出问题
1. 问题表现
- 最大数位
2^31 -1
即7fff ffff,是8000 0000 -1的结果 - 最小数为
-2^31
,即16进制为8000 0000
- 示例1:循环超过整型范围
- 示例2:运算时边界越界
2. 问题原因
3. 解决策略
- C语言可以使用字符串等大数运算库
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
// boost version
cpp_int ba = 500;
int bb = 400;
int bc = 300;
int bd = 200;
cout << ba * bb * bc * bd << endl;
6. C语言字符串问题
1. 问题表现
2. 问题原因
3. C++中的解决方案
c++字符串标准库的实现
redis开源库的实现
记录字符串长度
- 空间换时间,记录长度
- 在编译期根据长度数据类型,记录长度
拼接字符串
- C语言实现
- Redis实现
- 长度的维护,更加安全
- 操作二进制位,可以处理
\0
的问题