### C、C++面试题知识点详解 #### 面试题1:变量的声明和定义的区别 **知识点:** - **变量定义**:为变量分配存储空间的过程称为定义。定义必须在作用域中仅出现一次,为变量提供初始值。 - **变量声明**:不分配存储空间,告诉编译器变量的名称和类型。声明可以在多个地方进行,但定义只能在一个地方。 - **extern关键字**:用于声明变量,表明变量定义在其他地方,通常用于跨文件的作用域。 #### 面试题2:各种数据类型与“零值”比较的if语句 **知识点:** - **bool类型**:非零即真,通常用if(flag)直接判断。 - **int类型**:比较时应把常数放在左侧,如if(0!=flag),以避免赋值与比较混淆。 - **指针类型**:应使用NULL或nullptr进行比较,如if(NULL==flag)。 - **float类型**:比较浮点数时要考虑精度问题,需确定一个比较范围。 #### 面试题3:sizeof和strlen的区别 **知识点:** - **sizeof**:是一个编译时操作符,计算数据类型或对象所占的字节大小。 - **strlen**:是一个运行时函数,计算以null字符'\0'结尾的字符串的长度。 - **数组与sizeof**:数组名作为sizeof的参数不退化为指针,而作为strlen的参数时会退化为指针。 #### 面试题4:C语言和C++中static关键字的区别 **知识点:** - **C语言中的static**:用于局部静态变量、全局静态变量和静态函数。 - **C++中的static**:除了C语言的用法外,还可以用来定义静态成员变量和静态成员函数。 #### 面试题5:C中的malloc和C++中的new的区别 **知识点:** - **new和delete**:作为C++的操作符,可重载,可以调用构造和析构函数。 - **malloc和free**:作为C标准库函数,用于分配和释放内存,不涉及构造和析构函数。 - **返回类型**:new和delete根据对象类型返回正确的指针类型,而malloc返回void指针。 #### 面试题6:编写宏MIN的注意事项 **知识点:** - **宏定义的副作用**:宏展开时不会检查操作数的优先级,可能导致意外的副作用。 #### 面试题7:指针能否为volatile **知识点:** - **volatile指针**:当指针指向的数据可能会被无法预知的外部因素修改时,应当将指针声明为volatile,以防止编译器优化。 #### 面试题8:a和&a的区别 **知识点:** - **数组名与指针**:在大多数表达式中,数组名退化为指向数组首元素的指针(数组的第一个元素的地址)。 - **指针运算**:指针的算术运算依赖于它所指向的数据类型。 #### 面试题9:C、C++程序编译内存分配情况 **知识点:** - **静态存储区分配**:在程序编译时分配,包括全局变量和静态变量,生命周期贯穿整个程序运行期间。 - **栈分配**:在函数调用时分配,用于局部变量,函数返回时释放。 - **堆分配**:通过动态内存分配函数(如C的malloc,C++的new)在运行时分配,需要手动管理内存生命周期。 对于这些经典C/C++面试题的解析,不仅涉及到语言基础知识点,还包括了编程实践中的注意事项、最佳实践以及编译器行为的细节理解。掌握这些知识点对任何希望提高C/C++编程能力的开发者都是非常有价值的。
剩余25页未读,继续阅读
- 粉丝: 0
- 资源: 17
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助