【笔试题】【day5】

发布于:2022-10-15 ⋅ 阅读:(315) ⋅ 点赞:(0)

目录

第一题(strcpy和strcat的相关知识)

第二题(二维数组指针的相关知识)

第三题(数组的指针的相关知识)

第四题(编辑、预处理、编译、链接)

第五题(sizeof和strlen的区别)


第一题(strcpy和strcat的相关知识)

下列程序的打印结果是()

char p1[15] = "abcd", *p2 = "ABCD", str[50] = "xyz";
strcpy(str + 2, strcat(p1 + 2, p2 + 1));
printf("%s", str);

A xyabcAB
B abcABz
C ABabcz
D xycdBCD

strcpy(p,q):将q字符串中的内容拷贝到p所在的空间中,最后返回p

        注意:p的空间大小一定要能够存下q中的字符总数,否则程序会崩溃

strcat(p,q):将q字符串中的内容拼接在p字符串之后,最终返回p

        注意:p空间一定要能够荣哪些q拼接进来的字符,否则程序会崩溃

我们先看到strcat(p1+2,p2+1),也就是将p1起始位置+2开始的字符串,也就是cd,然后拼接上p2的起始位置+1的位置,也就是BCD拼接到一起,组合成cdBCD,

然后再调用strcpy(str+1,"cdBCD")也就是将cdBCD拼接到str+2的位置,也就是变成了xy后面拼接上cdBCD,也就是组合成了xycdBCD,也就是我们的D

第二题(二维数组指针的相关知识)

下面程序的输出结果是()

#include<iosteam.h>
void main(){
    int n[][3] = {10,20,30,40,50,60};
    int (*p)[3];
    p=n;
    cout<<p[0][0]<<","<<*(p[0]+1)<<","<<(*p)[2]<<endl;
}

A 10,30,50
B 10,20,30
C 20,40,60
D 10,30,60

n其实就是一个两行三列的二维数组,行数可以省略,列数不能省略

10        20        30

40        50        60

然后我们的p是一个数组指针,因为先和*结合,然后指向一个具有int类型元素的一段连续空间

然后我们的p=n也就是我们的p所指向的是10        20        30这一行的一维数组

n[0]是一维数组-->int[3]

n[1]是一维数组-->int[3]

数组名表示数组首元素的地址,n中的第一个元素的类型是int[3]

n的二维数组中,首元素的地址就是int(*)[3]

p[0]-->*(p+0)是等价的,也就是*(p)

那我们的p[0]也就是[10,20,30],那么p[0][0]就是10,

*(p[0]+1)也就是从10开始往后一个元素的地址,然后解引用,也就是得到了20

(*p)表示的也是[10,20,30]这一行,然后+2,也就是从10开始往后两个元素,也就是30

第三题(数组的指针的相关知识)

下面哪个指针表达式可以用来引用数组元素a[i][j][k][l]() 

A (((a+i)+j)+k)+l)
B *(*(*(*(a+i)+j)+k)+l)
C (((a+i)+j)+k+l)
D ((a+i)+j+k+l)

intb[2][3];

b[1][2]==*(*(b+1)+2)

按照这个规则,我们不难看出答案应该是B

B

第四题(编辑、预处理、编译、链接)

由多个源文件组成的C程序,经过编辑、预处理、编译、链接等阶段会生成最终的可执行程序。下面哪个阶段可以发现被调用的函数未定义()

 A 预处理
B 编译
C 链接
D 执行

编辑:写代码的过程

预处理:宏展开

编译:让编译器来检测程序中是否存在语法的问题,如果存在语法的问题,则编译失败

汇编:将编译完成之后的汇编指令翻译成对应的二进制格式

链接:将目标文件.obj通过链接器连接到一起,最终生成一个可执行程序(将多个目标文件拼接成一个,并且还要解决地址的问题!比方说我们的a.c调用了b.c的函数,就需要去将地址链接过去)

注意:头文件是不参与编译的--因为在预处理阶段已经将头文件展开了

编译是只对源文件进行编译,每个源文件编译完成都会生成一个obj的目标文件

C

第五题(sizeof和strlen的区别)

 定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少()

A 10,4
B 4,4
C 9,9
D 9,4

sizeof所统计的是字符串的大小,其中dog字符串中的元素分别为'w','a','n','g','\0','m','i','a','o','\0'一共为十个,所以大小为10(一个char是一个字节)

而我们的strlen所统计的是字符串的长度,也就是在\0之前有多少个字符,也就分别为'w','a','n','g',一共是4个,所以结果为4个字节

所以答案为10,4,选A

A

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到