常见错误解析1.0

📅 2026/7/3 20:48:13 👁️ 阅读次数 📝 编程学习
常见错误解析1.0

常见错误解析

二维数组的初始化 :

char arr[13][13] ;

memset(arr,(unsigned char)'*',sizeof(char)*13*13 ;

位操作符 (对补码进行的操作符

~按位取反 ~5 == -6 (按位符中唯一一个单目操作符

&按位与

|按位或

^按位异或(双目)

memmove memset memcpy memcmp 四者均会把'\0'看作普通字符对待

strcat/strcpy/strstr/strtok/strcmp均将'\0'作为字符串结束标志,是函数逻辑的核心;

memcpy memmove 需要完全拷贝时需要将'\0'计算进去。

short -32768---32767

二叉树销毁所暴露出来的局部变量与前置空问题:

void BinaryTreeDestory2(BTNode** root) { if (root == NULL || *root == NULL) return; if ((*root)->left == NULL && (*root)->right == NULL) { free(*root); root = NULL;//依旧是仅修改局部变量 return; } BinaryTreeDestory(&((*root)->left)); BinaryTreeDestory(&((*root)->right)); }

错误原因:修改了二级指针的值 以为修改了 B 节点左指针的值

反思:形参是实参的临时拷贝对于指针不能修改对于整数可以修改理解它俩的原因就可以明白

复杂析构顺序问题

设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?( ) //.cpp C c; int main() { A a; B b; static D d; return 0; }

B->A 程序结束->D全局对象最后析构->C

自增运算符的前缀、后缀问题

部分选择题可能设坑!

把字符串转换为整数

0."返回整数作为最终结果"return ;
1.auto i i是**拷贝数据**不是下标。
2.[k++] 仅这一种情况无法触发自动扩容。
3.符号导致逻辑混乱 字符转整型不知道怎么办 题意理解不充分。
4.瞬记前置条件!
5.整型大数越界问题
6.size_t类型做下标时一定非负性质
7.reverse左闭右开

小数输出

printf("%f",3.14);

%f默认保留6位

new初始化

不能 int* s2 = new int[26](0); 而是 int* s2 = new int[26]();//自动全部初始化为0

struct内部嵌套struct与union的模糊问题

  1. 联合体不能同时包含多个活动成员- 一次只能使用一个成员

  2. 枚举定义位置不当- 应该在联合体外或正确嵌套

  3. 外侧多个联合体-仍保持各自单独属性。

//联合体 struct giftList { //公共属性 int memory;//库存 float singleVal;//单价 //商品类型 char goodType[20]; //商品属性 struct goodsattribute { union books { char bookName[30]; char authorName[20]; //书籍版本 enum version { Ⅰ, Ⅱ, Ⅲ, Ⅳ, Ⅴ }; size_t page; }; union cup { char design[30]; }; }; };

void main()与int main()

void main()仅适用于旧编译器。

赋值运算符的结合性、优先级及运算顺序

int main() { int a = 5; int b = a += a -= a /= a/2; }

运行结果:

解释:
根据运算符的结合顺序与优先级(赋值运算符全部为仅高于逗号表达式(唯一一个最低优先级的运算符)的运算符) 推出从左向右依次计算。

sizeof与strlen

在C++下二者的的使用类似于C下。

sizeof是操作符也是一个关键字用于计算类型/表达式(的类型)大小。

strlen()是一个函数计算字符串的大小。
函数原型如下:

size_t strlen(const char* s);

注意:在C++中iostream包含strlen但是在C中需要包含<string.h>

"构造"中拷贝构造与构造函数

如果没有显示写构造那我调用自动生成的构造函数 如果写了那么我调用你写的构造函数(包括拷贝构造函数)。
所以有:
当我们使用构造函数时若构造函数没有写 但写了拷贝构造那么调用构造函数时会转向拷贝构造的执行。

vector的溢出问题

vector<long> v(ma - mi + 1); //内部推测"int"所以vector就算使用long也 不行

main()双报错解析

指:链接阶段找不到程序入口main()函数 //编译下可能通过