C++ 操作系统 部分笔试选择题总结
1.假如在一个函数中有一下代码()
void fun()
{
int * p = (int*)malloc(sizeof(int));
int * q = p;
}
A. p指向的空间在堆上,q指向的空间在栈上
B. p指向的空间在栈上,q指向的空间在堆上
C. p指向的空间在堆上,q指向的空间在堆上
D. p指向的空间在栈上,q指向的空间在栈上
答案:D
解析:因为p指向的空间是由malloc开辟出来的,而我们又知道malloc函数是在堆上开辟的空间,所以p指向的空间在堆上,A. p指向的空间在堆上,而q和p指向了同一块儿空间,所以q指向的空间也在堆上.
2.给出下列程序的输出结果()
char *p = "helloworld";
char q[ ] = "helloworld";
printf("%d %d %d %d",sizeof(p),strlen(p),sizeof(q),strlen(q));
A 4 10 4 10 B 4 10 10 10 C 4 11 10 10 D 4 10 11 10
答案:D
解析: 首先p是一个指针,在32位下指针是4个字节,所以sizeof(p)是4,strlen求的是字符串的有效长度,所以两个都是10,求sizeof(q)就求的是数组的字节数要算上 斜 杠0,所以是11.
总结:
sizeof 和strlen的区别:
1.sizeof操作符的结果类型是size_t,该类型保证能容纳实现所建立的最大对象的字节大小。
2.sizeof是操作符,strlen是库函数。
3.sizeof可以用类型做参数,strlen只能用char*做参数,且必须是以''\0''结尾的。
4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。
5..strlen的结果要在运行的时候才能计算出来,时用来计算字符串的长度,不是类型占内存的大小。
6. 当适用了于一个结构类型时或变量, sizeof 返回实际的大小,当适用一静态地空间数组, sizeof 归还全部数组的大小。
3.对于int*p[5]的描述,下列选项正确的是()
A p是一个具有5个元素的指针数组,每个元素是一个int类型的指针。
B p[5]表示某个数组的第5个元素的值
C p是一个指向数组的指针,所指向的数组是5个int类型的元素
D p是一个指向某个数组中第5个元素的指针,该元素是int类型的变量
答案;A
解析:int*p[ 5] ,[ ]的优先级高于*,所以p先与[ ]结合成数组,在与*结合成指针数。
总结:
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身的大小决定,每一个元素都是一个指针,在32 位系统下任何类型的指针永远是占4 个字节。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下任何类型的指针永远是占4 个字节,至于它指向的数组占多少字节,不知道,具体要看数组大小。
4.已知一个线性表(38,25,74,63,52,48),假定采用散列函数h(key) = key%7计算散列地址,并散列存储在散列表A[0...6]中,若采用线性探测方法解决冲突,则在该散列表上进行等概率成功查找的平均查找长度为()
A 1.5 B 1.7 C 2.0 D 2.3
答案:C
解析:对线性表中的元素对7求模取余,得到的值作为下标
5.下列关键码序列哪些是一个堆()
A 90 31 53 23 16 48
B 90 48 31 53 16 23
C 16 53 23 90 31 48
D 16 31 23 90 53 48
答案:AD
解析:
堆有最大堆和最小堆,最大堆的堆顶元素是堆中最大的元素,并且最小堆的堆顶元素是堆中最小的元素。堆可用二叉树的形式来表示,但在最大堆中根的值要大于左右子树,在最小堆中,根的值要小于左右子树的。
6.有三个程序J1,J2,J3.程序在单核CPU执行时,三个程序需要的资源如下所示,优先级高的程序可以抢占优先级低的程序的CPU,但不能抢占IO,问当所有任务执行完毕时,共消耗的的时间是()
A 170ms B 160ms C 120ms D 130ms
答案:D
解析:由题优先级高的程序可以抢占优先级低的程序的CPU,但不能抢占IO,所以J1先开始执行cpu,而J2是先IO的,所以J2的IO先执行,J2的IO执行时间为50ms,此时J1的CPU已经结束,于是可以开始J1的IO,对于J2来说,当J1的CPU结束之后,J2的IO还没有结束,所以要等上10ms后,J2的CPU才开始执行。接着J3的CPU和IO在执行。
CPU时间共100ms ,IO时间为130ms