c++指针和引用之高难度(三)习题讲解

1.【单选题】

int* p;

{

        std::unique_ptr< int [] > ptr{ std::make unique<int []>(5)};

        ptr[2] = 250;

        p = ptr.get();

}

p[2] = ?

A 0         B 250         C 不确定

解析:这道题大括号里的变量执行完就被释放内存了,所以ptr智能指针的值被释放掉,p[2] 的值不确定。

2.【单选题】

int* p;

{

        int* a = new int [5];

        p = a;

        a[2] = 250;

}

p[2]=?

A 0         B 250         C 不确定

解析:这道题和上一题的区别是,指针 a 变量在括号执行完被释放,但是它指向的从堆中申请的内存空间还在,所以 指针 p 还在, p [2] = 250。 

3.【单选题】

std::shared ptr<int[]> a {new int[5]{1001,1002,1003,1004,1005}};

std::shared ptr<int[]> b {a};

std::shared ptr<int[]> c {b};

a.reset();

c.reset();

b.use_count() = ?

A 0         B 1         C 2

解析:这道题比较简单,a, b 和 c 共享智能指针,a 和 c 被释放了,那就剩下 b 了,选B。 
 

4.【单选题】

char str[100] { “hello china!” };

str[5] = 0;

std::cout << str;

屏幕上显示的内容为:

A hello        B hello china!        C hello0china!        

解析:这道题很多人会选择C,那就错了。str[5] = 0,刚好是空格为0(即空字符 \0),但是在 C 和 C++ 中,字符串是以空字符 \0 结尾的字符数组。当你将一个字符数组作为字符串输出时,输出函数(会在遇到第一个空字符时停止输出,所以选A。

5.【单选题】

char str[100] {“hello中国”};

std::cout << strlen(str);

屏幕上显示的内容为:

A 9        B 7        C 10

解析:一个中文占两个字节,所以选A。

6.【单选题】

typedef struct Role

{

        int hp;

        int mp;

}*PROLE;

PROLE pRole = new Role{250,350};

int a = (int) pRole,

a = a+4;

int* b = (int*)a;

(*b) += 500;

pRole->hp = ?  pRole-> mp = ?

A250,350         B750,350        C250,850

解析:这道题考察的是 变量在结构体中是如何存储的,其中 a 指向结构体的地址,然后向右移动了四个字节,又指向了 mp,之后mp的值加 500,所以选C。

7.【单选题】

typedef struct Role

{

        short id;

        int hp;

        int mp;

}*PROLE;

typedef struct Monster

{

       char id; 

        int hp;

        int mp;

};

sizeof(Role) = 12;        

sizeof(Monster) = ?

A 12         B 9         C 11

解析:这道题考察结构体中变量的存储存在内存对齐的形式。char 和 short 一样都占 4

 个字节,所以选A。

8.【单选题】

typedef struct Role

{

        short id;

        int hp;

        int mp;

}*PROLE;

PROLE pRole = new Role{250,350};

int a = (int)pRole,

a = a + 4;

int* b = (int*)a;

(*b) += 500;

假设sizeof(Role) = 12         pRole->hp = ?        pRole->mp = ?

A250,350         B750,350         C250,850

解析:这道题和第六道题类似,只要确定了 short 也占用 4 个字节,那么 指针 b 的地址就指向 hp,所以选B。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大卫的纯爱战士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值