牛客网中c++题目及其知识点详解

本文详细解析了C++中的动态内存分配,包括使用new关键字创建未初始化和初始化的整型对象及数组。同时,介绍了如何为内置类型提供初始值,并探讨了32位系统中数组占用内存的情况。
摘要由CSDN通过智能技术生成

1.下面描述正确的是
1
2
int *p1 =  new int [ 10 ]; 
int *p2 =  new int [ 10 ]();
p1和p2申请的空间里面的值都是随机值
p1和p2申请的空间里的值都已经初始化
p1申请的空间里的值是随机值,p2申请的空间里的值已经初始化
p1申请的空间里的值已经初始化,p2申请的空间里的值是随机值
解析:c++ primier plus (第六版)104,320页的讨论: 使用new来创建动态数组,意味着数组是在程序运行时创建的,在程序运行时确定数组的长度,而不是在编写程序时指定数组的长度.。默认情况下,动态分配的对象是无名的未初始化的(即生成随机值,相当于调用默认构造函数):

int *pi=new int ;//pi指向一个未初始化的对象,对象类型为int 

int  pi=new int [10];//10个未初始化的对象

如果要为内置的标量类型(如int 或double)分配存储空间合并初始化,可在类型名后面加上初始值,并将其用括号括起:
int*pi=new int (6);//*pi初始化为6

int*pi=new int [10]();//10个值初始化为0的int型对象。

2.

enum string{    
     x1,    
     x2,    
     x3= 10 ,    
     x4,    
     x5,    
} x;
函数外部访问x等于什么?


解析:如果是函数外定义那么是0
如果是函数内定义,那么是随机值,因为没有初始化

3.

1
2
3
4
unsigned  char *p1;
unsigned  long *p2;
p1=(unsigned  char *) 0x801000 ;
p2=(unsigned  long *) 0x810000 ;
请问p1+5= 什么?
p2+5= 什么?

801005   810005
801010   810014
801005   810014
801010  810015
解析:注意是16进制,一个unsigned long占4个字节,指针是跳类型不是跳字节的,所以跳5就是偏移4*5=20个字节,16进制14,加上段地址 0x810000就是0x810014.

4.在32位机器中,如下代码:

1
2
3
4
5
6
7
8
9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值