您的位置:首页 > 其它

实习整理(八)

2015-11-16 17:46 190 查看
部分题目的答案和解析参考网上的资料和师兄们的答案,不保证百分之百正确,如果有错误,希望各位“博友”积极指正。。。

1.void func(char str[50])
{
printf("A %d B %d ",sizeof(str),strlen(str));
//因为传递的是指针,所以str的sizeof结果为4(假设为32位系统),因为str是由strb传递过来的,所以str也指向字符'e'所在的内存单元,因此其字符长度为'elloWorld'的个数

}
int main(void)
{
char stra[]="HelloWorld";
char *strb=stra;
printf("C %d D %d ",sizeof(stra),sizeof(strb++));
//stra为字符数组名,求其sizeof时应为字符个数加1(加1是因为字符数组以'\0'结尾),strb为指针,求其sizeof则为地址位数,若为32位系统,则sizeof的结果为4,若为64位系统,则结果为8
func(++strb);
//strb原来指向字符'H'所在的内存单元,现在进行了++strb操作后指向了字符'e'所在的内存单元,且传递的是指针,即地址
printf("E %d F %d ",strlen(stra),strlen(strb++));
//stra仍指向字符'H'所在的内存单元,因此其strlen为'HelloWorld'的长度,strlen(strb++)先计算strb所指向的字符串长度,之后strb再自增,因此其结果仍为'elloWorld'的字符个数
return 0;
}
PS:这道题要注意的是strlen求得是字符个数,不用算上结束符'\0',sizeof便要算上结束符'\0'所占的字节
此外,数组若作为参数传递,则其便会退化为指针

2. std::string name1="youku";
const char * name2="youku";
char name3[]={'y','o','u','k','u'}//没有'\0',因此不知何时结束,若char name3[]="youku",则确定了输入字符u之后就结束了
size_t l1=name1.size();//name1.size()作用与strlen(name1)一样
size_t l2=strlen(name2);
size_t l3=sizeof(name2);
size_t l4=sizeof(name3);
size_t l5=strlen(name3);
l1=5 l2=5 l3=4 l4=5 l5=不确定

3.struct st_t(
int status;
short * pdata;
char errstr[32];
);
st_t st[16];
char * p=(char *)(st[2].errstr+32);
printf("%d",(p-(char *)(st))); //输出为120

若改为:
(st_t *) p=(st_t *)(st[2].errstr+32);
printf("%d",(p-st));//结果为3

3.在如下8*6的矩阵中,请计算从A移动到B一共有多少种走法?要求每次只能向上挥着向右移动一格,并且不能经过P
()




A)492 B)494 C)496 D)498

答案:A
解析:走到B共需要12步,其中7步必须向右,5步必须向上,但次序可以不同,因此是C(7,12),要求P不能走,那么走到P的可能次数是C(3,6),从P走到B的可能次数是C(4,6),因此结果是C(7,12)
– C(3,6)*C(4,6)=492
PS:这道题腾讯和阿里都考过

4.如下关于编译链接的说法错误的是()

A. 编译优化会使得编译速度变慢

B. 预编译头文件可以优化程序的性能

C. 静态链接会使得可执行文件偏大

D. 动态链接库会使进程启动速度偏慢

答案:D

解析:静态链接:如果函数库的一份拷贝是可执行文件的物理组成部分;动态链接:如果可执行文件只是包含了文件名,让载入器在运行时能够导入程序所需要的函数库;静态链接的模块被链接编辑并载入以运行;动态链接可执行文件比功能相同的静态链接可执行文件的体积小;

5.如下关于链接的说法错误的是()

A)一个静态库中不能包含两个同名全局函数的定义

B)一个动态库中不能包含两个同名全局函数的定义

C)如果两个静态库都包含一个同名全局函数,他们不能同时被链接

D)如果两个动态库都包含一个同名全局函数,他们不能同时被链接

答案:C
解析:函数可以定义在3个地方1.
程序自身2. 静态库3. 动态库因为静态库是要链进程序的,所以函数定义在程序和静态库可以看成是一样的同名函数出现在程序和静态库中,链接时会报重定义的错误。同名函数出现在动态库中,编译链接都可以通过,但是调用会出问题,会出现覆盖问题。

定义在这3个地方的函数,会调用哪个函数呢?

1. 程序和静态库定义了同名函数,链接报错:重定义

2. 程序或静态库定义的同名函数,会覆盖动态库中定义的函数

3. 动态库中定义的同名函数,先链接覆盖后链接的函数

6.下列说法中错误的是()

A)插入排序某些情况下复杂度为O(n)

B)排序二叉树元素查找的复杂度可能为O(n)

C)对于有序列表的排序最快的是快速排序

D)在有序列表中通过二分查找的复杂度一定是O(n log2n)

答案:C
解析:数组基本有序的情况下排序最快的是直接插入排序

7.在UNIX系统中,目录结构采用()
A.单级目录结构 B.二级目录结构 C.单纯树形目录结构 D.带链接树形目录结构

答案:我想的答案是D

8.int a[10]; 问下面哪些不可以表示 a[1] 的地址()
A. a+sizeof(int)
B. &a[0]+1
C. (int*)&a+1
D. (int*)((char*)&a+sizeof(int))

答案:A
解析:sizeof(int)=4,a+sizeof(int)=a+4=a[4]

9.下面哪些函数调用必须进入内核才能完成?()

A. fopen

B. exit

C. memcpy

D. strlen


答案:AB
解析:fopen是打开文件的函数,文件也可以看成是一个设备,打开一个设备将导致给设备所属的驱动程序发送一个IRP,而与真实硬件相关的驱动程序都运行于内核;exit函数是结束进程的函数,结束进程需要访问PCB(进程控制块)和TCB(线程控制块)等等一些数据结构,而这些数据都存在于内核中;memcpy 和 strlen 我们可以直接不调用任意函数写出来这种函数肯定不会实现在内核的

未完待续。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: