1.代码执行后,a和b的值分别为 200 10
class Test{
public:
int a;
int b;
virtual void fun() {}
Test(int temp1 = 0, int temp2 = 0)
{
a=temp1 ;
b=temp2 ;
}
int getA()
{
return a;
}
int getB()
{
return b;
}
};
int main()
{
Test obj(5, 10);
// Changing a and b
int* pInt = (int*)&obj;
*(pInt+0) = 100;
*(pInt+1) = 200;
cout << "a = " << obj.getA() << endl;
cout << "b = " << obj.getB() << endl;
return 0;
}
解:
需要考虑虚函数表,指向虚函数表的指针在32位系统下占用4个字节,其地址分布在整个类成员变量的地址的首部,接下来就是变量a的地址、b的地址。
当将test对象obj赋给指向整型的pInt后,指针pInt指向了地址的首部也就是虚函数表指针,所以*(pInt+0)=100改变的是虚函数表的值,接下来*(pInt+1)=200改变的是变量a的值,变量b没有变换。
2.下列叙述中正确的是 B
A 有一个以上根结点的数据结构不一定是非线性结构
B 只有一个根结点的数据结构不一定是线性结构
C 循环链表是非线性结构
D 双向链表是非线性结构
解:线性结构应满足:有且只有一个根结点与每个结点最多有一个前驱,也最多有一个后继。有一个以上根结点的数据结构一定是非线性结构。循环链表和双向链表都是线性结构的数据结构
3.下面哪几个语句正确的声明一个整型的二维数组CD
A int a[][]=new int[][]
B int b[10][10]=new int[][]
C int c[][]=new int[10][10]
D int []d[]=new int[10][10]
4.下列关于数组与指针的区别描述正确的是 B
A 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。//上一题证明:可在堆区创建
B 用运算符sizeof 可以计算出数组的容量(字节数)
C 指针可以随时指向任意类型的内存块。
D 用运算符sizeof 可以计算出指针所指向内容的容量(字节数)
解:
A.堆上创建动态数组
B.sizeof(数组名)就是数组的容量
C.const指针不可以
D. char* str = “hello”; sizeof(str)不能计算出内容的容量,只是指针的容量。