C/C++面试必看:预编译、指针常量解析及字符串比较

需积分: 10 21 下载量 126 浏览量 更新于2024-07-24 收藏 66KB DOC 举报
“C/C++面试笔试相关问题及解析” 在C/C++的面试和笔试中,经常会遇到一些核心概念和技术的考察。以下是针对题目提供的部分知识点的详细解释: 1. **预编译**:预编译是编译过程的一个阶段,主要处理以`#`开头的预处理器指令,例如`#include`、`#define`等。当代码包含大量不经常改变的头文件,或者多个源文件需要共享相同的配置时,预编译可以提高编译效率。预编译头文件(通常命名为`precompiled.h`)可以保存预编译的结果,以减少完整编译的时间。 2. **指针和常量**: - `char*const p`:表示常量指针,指针变量`p`的地址不能改变,但可以通过`p`修改它所指向的字符。 - `char const *p`:表示指向常量的指针,`p`可以改变,但不能通过`p`修改它所指向的字符。 - `const char *p`:表示指向字符的常量指针,即指针变量`p`和它所指向的字符都是常量,都不能修改。 3. **字符串数组与指针**: - `str1`、`str2`、`str3`、`str4`都是字符数组,它们在内存中占据连续的空间,每个数组都有自己的地址。所以,`str1==str2`的结果为0,表明它们不是同一个内存位置。 - `str5`、`str6`、`str7`、`str8`都是指向常量字符串的指针,它们都指向同一块常量存储区的"abc",所以`str5==str6`和`str7==str8`的结果为1,表示它们指向相同的位置。 4. **sizeof运算符**: - 在C/C++中,`sizeof`运算符可以返回变量或类型占用的内存字节数。在函数外部,`sizeof(str)`对静态数组有效,能计算出整个数组的大小,包括结束的`\0`字符,因此`sizeof(str)/sizeof(str[0])`会得到数组元素的数量。 - 在函数内部,`str`被当作指针传递,`sizeof(str)`只返回指针本身的大小,而不是它所指向的数组大小。因此,在`UpperCase`函数中,`sizeof(str)/sizeof(str[0])`的计算结果可能不正确,因为这只会得到指针的大小(通常是4或8字节),而不是数组的实际元素个数。这可能会导致循环错误,影响代码的正确性。 在面试或笔试中,理解这些基本概念及其应用至关重要。对于C/C++程序员来说,熟悉指针、数组、字符串、预编译以及`sizeof`运算符的使用是非常基础且重要的技能。在准备面试时,除了掌握这些知识,还应了解内存管理、异常处理、模板、STL容器、多线程编程等高级主题,以便全面展示自己的专业能力。