C++笔试题目解析:字符串与指针、类型转化

需积分: 10 5 下载量 158 浏览量 更新于2024-07-29 收藏 106KB DOCX 举报
"C++笔试题目集锦,涵盖了不同企业的面试题,旨在帮助求职者准备C++相关的笔试环节。" 在C++编程语言中,笔试题通常会涉及基础语法、内存管理、类与对象、模板、STL等核心概念。以下是根据给定的题目内容解析的一些关键知识点: 1. 字符串比较: - `str1` 和 `str2` 是字符数组,它们在内存中各自占据一片区域,即使内容相同,它们的地址也不一样,因此 `str1 == str2` 输出 `false`。 - `str3` 和 `str4` 同样是字符数组,但声明为 `const`,意味着它们的内容不可修改。虽然它们的内容相同,但它们在内存中的位置也是独立的,所以 `str3 == str4` 也输出 `false`。 - `str5` 和 `str6` 是指向常量字符的指针,它们都指向内存中的同一块静态数据区,因此 `str5 == str6` 输出 `true`。 2. `sizeof` 运算符: - 在C++中,`sizeof` 可以计算变量或类型占用的字节数。对于静态数组,它会返回整个数组的大小。但在函数参数传递时,数组名会被当作指针处理,所以 `sizeof(str)` 在函数内部只会返回指针的大小,通常为4或8个字节,而非数组的实际长度。 - 在例子中,`sizeof(str)/sizeof(str[0])` 在函数外正确地给出了字符串的长度(包括结束符),但在函数内部则只返回指针的大小,导致错误的结果。 3. 类型转换: - C++中,类型B可以隐式转换为类型A的情况: a. B类公开继承自A类(直接或间接)。 b. B类中有一个到A类型的转换运算符 `operator A()`,这允许B对象被当作A对象使用。 c. A是B的一个引用或指针类型,且B有一个显式的构造函数,接受A作为参数。 d. A是内置类型,B有一个转换构造函数,接受A作为参数。 e. A是布尔类型,B有一个隐式转换到布尔值的机制(例如,非零值被视为`true`,零值被视为`false`)。 这些知识点是C++程序员在面试和笔试中常见的考察点,理解并掌握它们对于解决实际问题和通过技术面试至关重要。学习C++时,应注重理解内存管理、类型转换规则以及如何正确使用标准库等核心概念。