C++/C笔试面试常见问题解析

4星 · 超过85%的资源 需积分: 10 126 下载量 199 浏览量 更新于2024-07-25 4 收藏 305KB PDF 举报
"C++_C笔试面试题及解析" 在C++和C的笔试和面试中,经常会遇到一些核心概念和技术的考察。以下是对提供的题目进行的详细解答: 1、const有什么用途? - const可以用来定义常量,一旦赋值后就不能修改,这有助于保证程序的稳定性和安全性。例如: ```cpp const int MAX_SIZE = 100; // 定义一个常量,表示最大容量 ``` - const可以修饰函数参数,表明该参数在函数内部不会被修改,提供了一种声明函数不改变参数值的约定。例如: ```cpp void printValue(const int num) { // num参数是只读的 // 无法在这行修改num num = 5; // 错误:无法修改const参数 } ``` - const还可以修饰函数的返回值,告诉调用者这个函数不会返回一个可以被修改的对象。例如: ```cpp const int getConstant() { return 42; } ``` - 更进一步,const可以用于修饰类的成员函数,声明这个成员函数不会修改对象的状态,这样的函数被称为常量成员函数。例如: ```cpp class MyClass { public: void foo() const; // 常量成员函数,不会修改对象状态 }; ``` 2、在C++程序中调用被C编译器编译后的函数,为什么要加extern"C"? C++为了支持函数重载,会对函数名进行mangling(编码),使其包含函数的参数类型和返回类型信息。而C语言不进行这样的编码。因此,为了让C++代码能够正确链接到C编译的函数,我们需要使用`extern "C"`来告诉C++编译器这部分代码应遵循C的链接规则。例如: ```cpp extern "C" { void c_function(int x, int y); // C编译的函数 } ``` 3、两种for循环的优缺点分析: - 第一种循环结构,将条件判断放在循环内,每次迭代前都会进行一次判断。优点是代码简洁,易于阅读。缺点是多执行了N-1次逻辑判断,可能影响效率,因为编译器无法对循环进行优化。 - 第二种循环结构,先进行一次条件判断,然后分别执行循环体。优点是避免了多次判断,提高了循环的效率,利于编译器优化。缺点是代码相对复杂,阅读起来需要理解嵌套结构。 4、有关内存的思考题: - 在第一个例子中,`GetMemory`函数分配了内存,但没有正确地传递给`str`。因此,`str`仍然是NULL,尝试复制字符串到NULL指针会导致程序崩溃: ```cpp void Test(void) { char* str = NULL; GetMemory(str); // str仍然为NULL strcpy(str, "helloworld"); // 程序崩溃 printf(str); } ``` - 第二个例子中,`GetMemory`返回了一个局部变量的地址,这个变量在函数结束后会被销毁。因此,`Test`函数中尝试访问已被释放的内存,可能会打印出乱码或引发未定义行为: ```cpp char* GetMemory(void) { char p[] = "helloworld"; // 局部变量 return p; // 函数结束后,p所指向的内存被释放 } void Test(void) { char* str = NULL; str = GetMemory(); // str现在指向被释放的内存 printf(str); // 可能是乱码或未定义行为 } ``` 这些题目涵盖了C++和C中的const使用、跨语言调用、循环优化以及内存管理等关键知识点,是评估程序员基础技能的重要部分。在面试或笔试中,理解并能灵活运用这些概念是至关重要的。