59day---C++面试题

it2024-05-09  48

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)不能计算出内容的容量,只是指针的容量。

最新回复(0)