C++ 笔试题精选(四)

-回复 -浏览
楼主 2019-09-10 16:19:56
举报 只看此人 收藏本贴 楼主

笔试题精选(四)


题目一

在做C语言开发是,经常见到如下类型的结构体类型定义:

typedef struct Test{

struct Test *p_next;

struct Test *p_prev;

char data[0];

}test;

以上代码中char data[0];的作用是?(多选题目)

a. 方便管理内存缓冲区

b. 减少内存碎片化

c. 标识结构体结束

d. 没有特殊作用

正确答案: a b

题目解析:

在C99标准中,结构体中的最后一个元素允许是未知大小的数组,也就是这里的0长度,这就叫做柔性数组成员,但结构中的柔性数组成员前面必须至少一个其他成员。它的主要用途是为了满足需要变长度的结构体,为了解决使用数组时内存的冗余和数组的越界问题。

在一个结构体的最后 ,申明一个长度为空的数组,就可以使得这个结构体是可变长的。对于编译器来说,此时长度为0的数组并不占用空间,因为数组名

本身不占空间,它只是一个偏移量, 数组名这个符号本身代 表了一个不可修改的地址常量 (注意:数组名永远都不会是指针! ),但对于这个数组的大小,我们可以进行动态分配,对于编译器而言,数组名仅仅是一个符号,它不会占用任何空间,它在结构体中,只是代表了一个偏移量,代表一个不可修改的地址常量!


题目二

现有如下代码,请找出代码中错误的地方:

int main()

{

int i = 1;

int num = 2;

const int *pa;// 1

int const *pb = &i;// 2

pb = #//3

int * const pc = &i;//4

*pc = 20;//5

*pb = 300;//6

pc = #//7

return 0;

}

请选择()

a. 1,2,3,4,5,6,7

b. 1,3,5,6

c. 6,7

d. 3,5

正确答案: c

题目解析:

对于以上代码,主要考察的是const与*的位置关系,具体分析如下:

int main()

{

int i = 1;

int num = 2;

const int *pa;// 1 这里表示 *pa是不能被修改的,但是pa本身是可以修改的

int const *pb = &i;// 2 这里表示 *pb是不能被修改的,但是pb本身是可以修改的

pb = #//3

int * const pc = &i;//4 这里表示pc本身是不能被修改的,但是*pc是可以被修改的

*pc = 20;//5

*pb = 300;//6

pc = #//7

return 0;

}

我要推荐
转发到