牛客刷题第六天:20191112

1.在这里插入图片描述
这又是一道字节对齐问题。以前做过这道题,又错了,心痛、、、
解析:结构体内对齐规定,结构体的总大小为最宽基本类型成员大小的整数倍,例子中,最宽的是float 8个字节,因此结构体的每个数据成员为8的倍数。此外,在结构体里面还有一个联合体(联合体的大小取决于内部最大字节数,联合内部最大的数据成员类型为int 占4个字节,所以联合体的每个数据成员为4的倍数)
因此,本实例中struct stu
{
union {
char bj[9];//占据9个字节,根据字节对齐,占据9+3=12个字节
int bh[2];//占据8个字节
}un; //占据12个字节 后面是char,不需要对齐
char xm[8];//本行占据8个字节,共占据(12)+8=20个字节,根据字节对齐,20不是double的整数倍,补充4个字节,因此一共占据20+4=24个字节
double cj;//本行占据8个字节
}xc;//共占据24+8=32个字节

再来看一个例子
在这里插入图片描述
这里就很容易能够看出来是在xm后面进行字节对齐,而不是在联合体后面。

在这里插入图片描述在这里插入图片描述
答案:c1(b)
解析:本例中,A选项,B1已经初始化,不需要再进行初始化,C选项,c2是B2类的对象,但是B2中,没有有参数列表的构造函数,因此不能进行初始化,D选项同理。这里附上一篇介绍虚函数的博文:https://blog.csdn.net/qq_34342154/article/details/79347829

3.在这里插入图片描述
这里涉及的是八进制,十进制,十六进制以及移位的表示。
解析:八进制:oct 一般都是三位数字表示 ,十进制:dec,十六进制:hex,一般以0x开头; 左移右移的时候,首先将原来的数字转换成二进制在进行移动,本题中,首先将040转换成二进制 0100 0000 在进行左移得到 1000 0000 ,由于输出是八进制表示,在转换成为八进制即为100
这里附上一篇介绍进制的博文;https://blog.csdn.net/hannea/article/details/23609211

4.在这里插入图片描述解析:char 类型的变量或者常量之间也可以进行加减运算,相当于该量的ASCII码之间的换算,例如 ‘9’-‘0’就相当于计算两个字符之间的差值。

在这里插入图片描述
答案:1
解析:一定要注意 && 的优先级是高于||,这里的程序相当于(!a&&!b)||!c

在这里插入图片描述多重继承定义:
一个派生类(D)有2个或2个以上的基类(B和C);

多重继承引起的二义性:
假如上述这些基类(B和C)具有相同的基类A,A中的成员数据和成员函数,最终都会以双份的形式拷贝到类D中,
那么调用的时候就会出现二义性问题。

虚基类:
专门用来解决多重继承引起的二义性问题;(可以理解为D直接从A继承)
虚基类的具体实现的注意细节有很多,这里不再列举了,我认为只需要了解原理即可。

尽管C++或其他OO语言支持多重继承,但在实际软件开发中多重继承用的并不多,
原因在于多重继承过手复杂。因此,在C#中已经不再支持多重继承了。多重继承就主要在于消除二义性。

7.关于文件指针的依一些概念:
(1)文件指针就是指向文件 的指针变量,指向的是一块内存区域,这块区域存储的是打开的文件的相关信息,包括文件文件读取指针的当前位置,文件读取缓冲区的大小等等信息,但这些并不是指向文件,fscanf是从文件中读取信息,fprintf才是向文件中写入。(2)FILE是指针变量标识符,是由系统定义的一个标识符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值