常见错误解析

二维数组的初始化 :

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()函数    //编译下可能通过

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐