题目1
题解:
- char、short、int、long、bool 基本类型都可以用于switch语句。
- float、double都不能用于switch语句。
- enum类型,即枚举类型可以用于switch语句。
- 所有类型的对象都不能用于switch语句。
- 字符串也不能用于switch语句
题目2
题解:
最后两个语句还原回来就是 int* a,b; int* c; int* d; 因为#define是宏定义,仅仅是直接替换。而typedef是把该类型定义一个别名。故此次b只是int类型。而 a,c,d才是指针类型。
题目3
题解:
在 C 语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。文件指针不是文件位置指针,所以 BC 选项错误, D 选项中不可以写入任意的字符。
题目4
题解:
习题5
题解:
复制构造函数被调用的三种情况
l 定义一个对象时,以本类另一个对象作为初始值,发生复制构造;
l 如果函数的形参是类的对象,调用函数时,将使用实参对象初始化形参对象,发生复制构造;
l 如果函数的返回值是类的对象,函数执行完成返回主调函数时,将使用return语句中的对象初始化一个临时无名对象,传递给主调函数,此时发生复制构造
问题6
题解:
-
方便管理内存缓冲区:如果用指针 char* 代替 char data[0] 来指向新开辟的空间,需要两次malloc也需要两次free。用char data[0],一次malloc即完成,方便管理缓冲区。
-
减少内存碎片化:如果在struct尾部用指针*指向新开辟的buffer长度,struct本身相较buffer长度是很小的,即碎片化的内存。而用char data[0]指向新开辟的buffer,只需一次malloc,struct和buffer的空间是连续的。即减少了内存的碎片化。
-
节省空间,相较用指针指向新开辟的str,data[0]是不占用内存的,而指针占用4字节。
一、在struct结构定义的后面使用data[0]的好处:
1.方便管理内存缓冲区:如果用指针 char* 代替 char data[0] 来指向新开辟的空间,需要两次malloc也需要两次free。用char data[0],一次malloc即完成,方便管理缓冲区。
2.可以减少内存碎片化:如果在struct尾部用指针*指向新开辟的buffer长度,struct本身相较buffer长度是很小的,即碎片化的内存。而用char data[0]指向新开辟的buffer,只需一次malloc,struct和buffer的空间是连续的。即减少了内存的碎片化。
3.节省空间(这里就不得不说说指针和data[0]的区别)
二、使用指针和data[0]有一下区别:
1.地址的连续性,data[0]和结构体是一个连续的存储空间,使用指针就不是连续的。连续的存储空间通过不同的强转使用起来比较灵活。
2.data[0]不占用任何内存,*data占用4字节 。
3.建议:C++的类中可以使用 *data但是不要使用data[0],因为这样使用可能会导致类中的一些看不到的东西被覆盖
题目7
题解
【解释】通过调用getchar函数将输入的第一个字符赋给c1,所以c1的值是字符’1’,接下来调用scanf函数将输入的两位数赋给整型变量a1,但此时输入的两位是2a,a是无效的数字,所以只将2赋给变量a1,字符’a’通过后续的getchar函数将其赋给变量c2,再接下来调用scanf函数将输入的三位数赋给整型变量a2,则a2的值为345。所以正确答案是A。
题目8
题解
链接:https://www.nowcoder.com/questionTerminal/e2ef573a02bd46659fd683a805284c80
来源:牛客网
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐。
每个特定平台上的编译器都有自己的默认“对齐系数”(32位机一般为4,64位机一般为8)。我们可以通过预编译命令#pragma pack(k),k=1,2,4,8,16来改变这个系数,其中k就是需要指定的“对齐系数”;也可以使用#pragma pack()取消自定义字节对齐方式。
struct 或者 union 成员对齐规则如下:
-
第一个数据成员放在offset为0的地方,对齐按照对齐系数和自身占用字节数中,二者比较小的那个进行对齐;
-
在数据成员完成各自对齐以后,struct或者union本身也要进行对齐,对齐将按照对齐系数和struct或者union中最大数据成员长度中比较小的那个进行;
先局部成员对齐,然后再全局对齐。
题目9
题解
有纯虚函数的不允许实例化。C,D都是要创建shape的对象,所以不可以,A和B分别说明了通过指针和引用实现多态的两种方式
题目10
题解
长整数常量后面要加L. 没有加L,则默认为int类型,在16位系统下,int是16位的,占2个字节,有效范围是-32768到+32767,A、B、C的选项都会超出这个范围.