C/C++笔试攻略:解密算法与编程技巧

需积分: 9 1 下载量 28 浏览量 更新于2024-09-15 收藏 44KB TXT 举报
"C、C++笔试题集锦,包含了华为等企业常见的笔试题目,适合准备找工作的程序员复习和提升。" 1. 溯 Morris 遍历 这段代码是用于实现二叉树的 Morris 遍历算法。在不使用额外空间的情况下,通过改变树的链接来达到遍历的效果。`func` 函数计算二叉树中节点的子树个数。`x` 代表当前节点,`countx` 用于计数。`x = x & (x - 1)` 是一个位操作技巧,用于找到二进制表示中最后一个为1的位并将其置为0,从而迭代地处理每个子节点。 2. 字符串常量与字符串字面量 在C++中,字符串字面量如`"hello"`是不可变的(const),它们被存储在只读内存区域。如果试图修改字符串常量会导致未定义行为。使用`const char*`或`const string&`作为参数可以确保不会意外修改字符串内容,避免运行时错误。 3. 字符数组与字符串 C++中的字符串可以表示为字符数组,但它们之间有区别。字符数组可以动态修改,而`std::string`类提供了更安全、更方便的字符串操作。例如,`std::string`支持各种方法,如`append`、`substr`等。在需要字符串拼接或修改的情况下,应优先使用`std::string`。 4. const引用 const引用用于保证不会修改引用的对象。在给函数传递参数时,使用const引用可以防止函数内部对原对象的修改。例子中,`const int&ra=a;`表明`ra`是`a`的只读引用,不能通过`ra`修改`a`的值。但`a`本身可以修改,因此`a=1;`是合法的。在调用函数时,传入const引用可以防止函数内部误修改。 5. new与delete C++中的动态内存管理涉及到`new`和`delete`操作。`new`分配内存,`delete`释放内存。不正确的内存管理可能导致内存泄漏。`new`返回的是一个指向新分配内存的指针,而`new[]`返回一个指向数组首元素的指针。对应的,应该用`delete`释放单个对象,用`delete[]`释放数组。避免`new`后忘记`delete`,以及`delete`非`new`分配的内存,这可能导致运行时错误。 6. include语句 在C++中,`#include`用于包含头文件。例子中`#include<iostream.h>`是旧式的C++标准库引入方式,现代C++推荐使用`#include<iostream>`。这表明代码可能是较早版本的C++,需要注意兼容性问题。 7. 函数声明与定义 `int&put(intn);`是一个函数声明,表示`put`函数返回一个整型引用,接收一个整型参数。在程序中,还需要提供`put`函数的定义,即实现其功能的代码。没有函数定义,编译器将无法知道如何执行这个函数。 总结:这些题目涵盖了C++的基本概念,包括二叉树遍历、字符串处理、const引用、动态内存管理和函数声明。准备C++笔试时,应深入理解这些概念,并熟悉其实际应用。