59day---C++面试题

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值