https://www.nowcoder.com/questionTerminal/9884ac3aa6ee4a529b545e1bb4827b7e
20.如下代码输出结果是什么?
#include<stdio.h>
char *myString()
{
char buffer[6] = {0};
char *s = "Hello World!";
for (int i = 0; i < sizeof(buffer) - 1; i++)
{
buffer[i] = *(s + i);
}
return buffer;
}
int main(int argc, char **argv)
{
printf("%s\n", myString());
return 0;
}
A.Hello B.Hello World! C.Well D.以上全部不正确 链接:https://www.nowcoder.com/questionTerminal/9884ac3aa6ee4a529b545e1bb4827b7e
解析:A:最易错误选项,myString()返回前打印buffer确实是’Hello ‘;而实际函数返回值时,是个野指针,buffer作用域只在myString()内,返回后,栈已经释放。
19.运行时的输出结果是()
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(int i = 0)
{
cout << i;
}
MyClass(const MyClass &x)
{
cout << 2;
}
MyClass &operator=(const MyClass &x)
{
cout << 3;
return *this;
}
~MyClass()
{
cout << 4;
}
};
int main()
{
MyClass obj1(1), obj2(2);
MyClass obj3 = obj1;
return 0;
}
A.11214444 B.11314444 C.122444 D.123444
链接:https://www.nowcoder.com/questionTerminal/cf1a3145d1b946c1861c9d10b8629665 来源:牛客网
解析:关键是区分 浅/深拷贝操作 和 赋值操作: 没有重载=之前: A a ; A b; a = b; 这里是赋值操作。 A a; A b = a; 这里是浅拷贝操作。
重载 = 之后: A a ; A b; a = b; 这里是深拷贝操作(当然这道题直接返回了,通常我们重载赋值运算符进行深拷贝操作)。 A a; A b = a; 这里还是浅拷贝操作。
所以 MyClass obj3 = obj1; 调用的是拷贝构造函数。
如果写成 MyClass obj3; obj3 = obj1; 输出的结果就是 1203444
这题的错因是:误把拷贝构造函数,理解成了赋值!!!!!!
|