C/C++笔试面试经典题目解析

需积分: 3 3 下载量 69 浏览量 更新于2024-08-02 收藏 406KB DOC 举报
"c/c++ 笔试面试题" 这篇资料是关于C/C++的笔试和面试题目集合,包含了多个方面的问题,旨在测试对这两种编程语言的理解和掌握程度。问题覆盖了基本语法、类型转换、字符串处理等多个核心知识点。 1. 这一组问题涉及到C++中的字符串比较。在C++中,字符串实际上是以字符数组的形式存在的。`str1`和`str2`都是字符数组,它们在内存中存储的是同一串字符"abc",因此它们的地址不同,但内容相同。所以`(str1 == str2)`会比较它们的地址,输出`false`。`str3`和`str4`同理,但由于声明为`const char[]`,它们是常量字符数组,同样内容不同地址,也会输出`false`。`str5`和`str6`是`const char`指针,它们都指向常量字符串"abc"在内存中的同一位置,因此`(str5 == str6)`会输出`true`。 2. 这个问题探讨了C++中的隐式类型转换。非内置类型`A`和`B`之间,`B`可以在以下几种情况下隐式转化为`A`: - `B`类公有继承自`A`(包括间接继承),使得`B`对象可以被视为`A`对象。 - `B`类中有一个成员函数`operator A()`,该函数允许`B`对象被当作`A`对象使用。 - `A`类有一个非`explicit`的构造函数,接受`B`类型的引用或指针作为参数。 - 虽然不是严格意义上的隐式类型转换,但是`A`类定义了赋值操作符`A& operator=(const A&)`,这使得`B`对象可以通过赋值操作转换为`A`对象。 3. 这个问题涉及到C++中的`sizeof`运算符。`sizeof(str)`返回整个数组`str`所占用的字节数,而`sizeof(str[0])`返回单个元素(在这里是`char`)的大小。在循环中,通常使用`sizeof(str)/sizeof(str[0])`来获取数组的元素个数。然而,当`str`传递给函数时,它实际上被当作指针处理,`sizeof(str)`只返回指针本身的大小,而不是整个数组的大小。因此,如果`str`是一个数组参数,这种计算方式可能会导致错误,因为它不会得到预期的数组长度。正确的做法是将数组长度作为额外参数传递给函数,或者在函数外部计算数组长度并传入。 这些问题反映了C/C++面试中常见的陷阱和重点,涵盖了基础语法、类型系统以及函数参数传递等核心概念。准备C/C++面试或笔试时,深入理解这些知识点是非常重要的。