记录一次C++笔试
一、选择题(25)
1.实现运行时多态要使用(C
)
A.构造函数 B.析构函数 C.虚函数 D.重载函数
2.在C++中,数据封装要解决的问题是(B
)
A.数据高速转换
B.切断了不同模块之间的数据的非法使用
C数据规范化排列
D.避免数据丢失
3.算法的时间复杂度是指(C
)
A.执行算法程序所需要的时间
B.算法程序的长度
C算法执行过程中所需要的基本运算次数
D.算法程序中的指令条数
4.执行语句printf”%x”-1),后输出结果是(D
)
A.-1
B.-ffff
C.1
D.ffff
5.数组定义为 int a[2][3]={1,2,3,4,5},数组元素值为1的是()
A.a[1][2]
B.a[1][1]
c.a[2][3]
D.a[0][0]
填空题(20分)
1.给定结构体
struct token_t{ |
则sizeof(token_t)=8
解析
:char是1字节,unsigned short是 2字节,unsigned long是4字节。所以一共是1+1+2+4=8;
规则
:需要字节对齐,使得内存访问速度提升。
成员变量存放位置一般是成员变量大小的倍数。
结构体的总大小是最大成员大小的整数倍。
声明的先后顺序对大小也有影响。(以32位的编译器举例子)
|
2.程序的局部变量存在于(栈
)中,全局变量存在于(静态数据区/全局数据区
)中动态申请数据存在于(堆
)中。
3.已知一个数组 array,用一个宏定义,求出数组的元素个数
4.char str[10];
strcpy(str,"0123456789")
产生什么结果?为什么?
解析
:strcpy源码如下
|
所以虽然source的大小为11,str表示管理缓冲区大小为10的指针,但是还是可以运行,不过会导致缓冲区溢出,这是一种常见的安全漏洞。此时str的值变为”0123456789“。注意
:char str[10]=”0123456789”;会在编译期间就报错了。
三、简答题,写出程序执行结果,并解释原因(10 分)
|
解析
getstr是值传递,不会改变str,对str
条件检查后,访问str[6],这是一种未定义的行为,可能会导致程序崩溃。注意
:printf(“%s”,str)时,因为未初始化,结果为(null)
MarkDown换行
html换行标签:
<br/>
使用
(全称是non-breaking space
,表示非断空行)注意使用分号
;
只有在编辑区的空白行才能起到换行的作用,否则只是起到一个空格的作用。