问答题
问答题1:下列代码输出啥?
#include <iostream>
using namespace std;
void func(char **m) {
++m;
cout << *m << endl;
}
int main() {
static char *a[] = {
"morning", "afternoon", "evening" };
char **p;
p = a;
func(p);
return 0;
}
提示:传入到函数 func 中的是一个二级指针,进行++操作指向了 a[1] 这个地址,解引用得到 a[1] 值
这道题在C(弱类型)编译环境可以通过,但是C++(强类型)编译器不通过,因为 main 函数第一行左边类型是const char* ,但是右边是可变的指针数组,类型不匹配
修改为
const char* a[] = {
"morning", "afternoon", "evening" };
char **p;
p = (char**)a;
必须先让等式两边类型相同,所以最后加个强制类型转化;
答案:afternoon
问答题2:有如下程序?
class MyClass {
public:
MyClass(int i = 0) {
cout << 1;
}
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), obj3(obj1);
system("pause");
return 0;
}
提示:调用两次构造函数,一次拷贝拷贝构造函数,三次析构函数.
答案:112 444
问答题3:代码执行后,a和b的值分别为?
class <