C++笔试题集锦:字符串比较与类型转换

4星 · 超过85%的资源 需积分: 4 30 下载量 67 浏览量 更新于2024-08-02 1 收藏 1.25MB PDF 举报
"C++应聘笔试题汇总,涵盖了C++的基础知识和高级概念,适用于应聘者准备面试或期末考试复习。" 在C++编程语言中,理解字符串和对象的比较、隐式类型转换以及内存管理是至关重要的。让我们逐一分析给定的题目。 1. 对于字符串的比较,C++中的字符串是以字符数组的形式存在的。`str1`和`str2`都是定义在栈上的字符数组,它们在内存中相邻分配,如果内容相同,它们的地址也是相同的,所以`str1 == str2`会返回`true`。`str3`和`str4`虽然内容相同,但由于它们是常量字符数组,编译器通常会在不同的位置存储它们,因此`str3 == str4`通常返回`false`。而`str5`和`str6`都是指向常量字符串字面值的指针,这些字面值在程序的只读存储区,尽管内容相同,但它们的地址不同,所以`str5 == str6`也会返回`false`。 2. 非C++内建类型之间的隐式类型转换通常发生在以下几种情况: a. 类型B公有继承自类型A,此时B可以被视为A的一个实例。 b. 类型B定义了一个`operatorA()`,这使得B的对象可以被当作A来使用。 c. 类型A有一个非显式的构造函数,接受一个类型B的引用或指针作为参数,没有其他参数或默认值。 d. 虽然不是真正的类型转换,但A类型的对象可以赋值给B类型的对象,如果B类型定义了从A到B的赋值运算符。 3. `sizeof`运算符用于计算对象或类型的大小。在第一个`sizeof(str)`中,由于`str`是一个未初始化的字符数组,其大小会计算整个数组的字节数,即包括空字符`\0`。而在`for`循环中,`sizeof(str)/sizeof(str[0])`用来获取数组元素的数量,这是正确的做法。然而,`str`在被传递给`UpperCase`函数时,传递的是数组的首地址,因此在函数内部`sizeof(str)`只会得到指针的大小,而不是字符串的长度。所以,`cout`打印的字符串长度是不正确的,应该在函数外部计算字符串长度并传递给函数。 4. 最后一个代码段的问题在于,`char2Hex`函数试图将字符`c`除以`0x10`然后加上`'0'`来将其转换为16进制的ASCII表示。但是,`0x10`代表16,而字符除以16的结果可能不在0-9或A-F的范围内,会导致错误的字符输出。此外,这个函数没有处理高四位的16进制数字,需要额外的逻辑来确保完整的16进制表示。 以上就是针对题目涉及的C++知识点的详细解析,涵盖了字符串比较、隐式类型转换、`sizeof`运算符的使用以及字符到16进制转换的陷阱。对于C++的应聘者来说,理解和掌握这些知识点是非常关键的。