C++面试必备:常量、函数调用与内存管理

需积分: 40 8 下载量 42 浏览量 更新于2024-09-09 1 收藏 144KB PDF 举报
"C++面试题,非常好用" 在C++面试中,掌握核心知识点是至关重要的。以下是对题目中提到的一些关键概念的详细解释: 1. **const的用途** - 定义常量:`const`关键字可以用来声明一个不可修改的变量,即常量。例如:`const int a = 10;`这里的`a`一旦赋值后就不能再改变。 - 函数参数和返回值:`const`修饰函数参数表示该参数在函数内部不会被修改,这可以提供一种契约,告诉调用者这个参数不会被篡改。同样,`const`修饰函数返回值表明返回的对象不会被修改,比如:`const std::string GetConstString() { return "Hello"; }` - `const`成员函数:对于类的成员函数,`const`修饰表明函数不会修改对象的状态。这样的函数可以在`const`对象上调用。 2. **extern "C"的作用** - 在C++中,为了支持函数重载,编译器会对函数名进行“名字修饰”(name mangling),以便能够区分具有相同名称但参数列表不同的函数。然而,C语言并不支持函数重载,其函数名保持不变。因此,当我们需要在C++代码中调用C编译的函数时,需要用`extern "C"`来声明,这样C++编译器就不会对这些函数的名字进行修饰,从而能正确链接到C函数。 3. **两种for循环的优缺点** - 第一种循环(条件在循环外):优点是程序结构清晰,逻辑判断只执行一次,减少了不必要的计算。缺点是如果`condition`为真,循环体内的代码可能会被执行多次,即使`condition`后来变为假,导致效率较低。 - 第二种循环(条件在循环内):优点是循环的执行次数与`condition`的真假无关,效率较高,特别是当`condition`在循环中可能改变时。缺点是代码较为复杂,阅读和理解成本增加。 4. **内存管理问题** - 动态内存分配:`malloc()`用于动态内存分配,返回的内存需要手动通过`free()`释放。在`GetMemory`函数中,虽然分配了内存,但没有将指针正确返回给调用者。 - 测试函数`Test`的问题:`GetMemory(str);`这一行试图将分配的内存赋值给`str`,但由于`str`是`NULL`,它不能接收内存。因此,`strcpy(str, "helloworld");`会导致程序崩溃,因为`str`并未指向有效内存。 这些面试题涵盖了C++中的常量使用、C++与C的兼容性、循环优化以及内存管理等基础但重要的概念。在准备C++面试时,深入理解并能够灵活应用这些知识点是非常关键的。