选择题
1. 空类对象占据字节数
class A {};
int main()
{
A a;
cout << sizeof(a) << endl;
}
输出1,即使空类没有数据成员和虚函数,它在内存中也必须占据一个字节的空间,以便确保每个对象都有独一无二的地址。名字是“空对象占位符(empty object placeholder)”,用于区分不同的对象。
2. C和C++向无参函数传参的区别
int func(void) {
cout << "a" << endl;
}
int main() {
func(2);
}
C++报错。因为C++定义的func函数需要一个参数,无法编译成功。
C是否报错存疑。网上一些解释说能够执行成功,因为C不会严格对传入参数数量进行检查。但我在一些C编译器上实验会报错。
3. 冷门的数组访问语法
int main() {
int a[] = {10,20,30};
cout << -2[a-1]<<endl;
}
返回-20。先不管负号。C++的下标运算符[]可交换,2[a-1]等价于a-1[2],a-1指向数组第一个元素前一个位置,向后移动两个元素指向20,再取负数得到结果。
4.枚举类型的遍历
enum Season
{
SPR = 0,
SUM,
AUT,
WIN,
} s;
int main()
{
for (s = SPR; s <= WIN; s++)
{
cout<<s<<endl;
}
}
以上程序会编译错误。C语言可以用s++来遍历。C++不能,应该改为:
enum Season
{
SPR = 0,
SUM,
AUT,
WIN,
} s;
int main()
{
for (s = SPR; s <= WIN; s=(Season)(s+1))
{
cout<<s<<endl;
}
}
输出0,1,2,3。
编程题
1. 输入两个数X和Y,可按照任意顺序执行以下两个操作:(1)X与Y交换;(2)X=X+Y,Y=X-Y。输出满足X=Y的最小操作次数。
思路:递归树