从这篇文章开始 进行笔试的训练环节,我会在 本专栏详细介绍笔试的易错点,帮助大家精准避坑。
1.有如下一段代码(unit16_t为2字节无符号整数,unit8_t位1字节无符号整数);
请问x.z.n在大字节序和小字节序机器上的值分别为多少()
A. 0x34, 0x12
B. 0x12, 0x34
C. 0x1234, 0x1234
D. 0x1234, 0
E. 0,0x1234
正确答案 : A
解析 :
在结构体中,先声明的是 低地址,然后是 高地址。所以 m 是低地址, n 是高地址。(栈生长方向是自上向下,先声明入栈,则 先高地址,后地址,结构体特殊 )
大端字节序 :较高有效字节位于内存的较低地址,而较低有效字节位于较高地址。 小端字节序:较低有效字节位于内存的较低地址,而较高有效字节位于较高地址。
大多数计算机系统中 ,最左边的地址被认为是最低地址(较小的地址值),而最右边的地址被认为是最高地址(较大的地址值)。
对于 0x1234 : 0x12:高位 , 0x34:低位 。 所以: 小端模式
m n
34 12
大端
m n
12 34
2 . 下面关于inline说法正确的是()
A . 关键字 inline 是强制行为
B . 关键字 inline 只是一种编译器建议
C . inline 不能避免函数调用时的参数传递带来的栈开销
D . inline 在运行时生效
正确答案 : B
解析 :
要先了解 inline 的基本用法:
inline 是一个关键字,用于向编译器提供函数内联展开的建议。使用 inline 关键字声明时,编译器会尝试将函数的调用处替换为函数体。
内联函数的目的是减少函数调用的开销,提高程序的执行效率。通过内联展开,可以避免函数调用的额外开销,例如函数栈帧的创建和销毁、参数的拷贝等操作。
注意:inline 关键字只是向编译器提供了内联展开的建议,而不是强制要求。编译器可以选择忽略 inline 关键字,尤其对于较大或复杂的函数,可能不会进行内联展开。
3 . 下列定义不正确的是( )
A . #define PI 3.141592
B . #define S345
C . int max(x,y); int x,y; { }
D . static char c;
正确答案 : C
解析:
#define S345 是空宏定义。 空宏定义是指在C语言中使用#define预处理指令创建一个空的宏。它是一种特殊的宏,它没有任何替换文本,相当于将宏名称替换为空字符串。空宏定义通常用于创建一个标识符,起到注释的作用或者在编译时启用或禁用一些代码片段。
4 . 以下程序的运行结果是()
A . 5
B . 6
C . 7
D . 8
正确答案 : C
解析:
由于赋值运算符的优先级高于逗号表达式,因此 pAd = ++sum, pAd++, ++pad; 等价于 (pAd = ++sum), pAd++, ++pad; sum 先自增然后赋值给 pAd,pAd 为 6,然后 pAd 自增变为 7。 逗号表达式的结果为最后一个表达式的值,因此正确答案为 C。
5 . 下列 main ()函数执行后的结果是()
A . 17
B . 15
C . 16
D . 1
正确答案 : C
解析:
& 位运算符将二进制数据进行按位 与 操作。
统计二进制数中 “ 1 ” 的个数: x&(x-1)
统计二进制数中 “ 0 ” 的个数: x|(x+1)
6. 下列程序段的输出结果为( )
A . 0085.6%%
B . 0085.7%
C . 0085.6%
D . .857
正确答案 : B
解析:
6.1f其中6 指一共保留6位有效数字,1表示小数点后面有一位数字 表示保留一位小数
%写在 %d %f %s 前面的,都是占位符,% 写在后面的,就是%。因此 整数部分4位有效数字(小数点本身也占一位)
原数字 85.67,那么 %06.1%f % 表示整数部分 0085 小数部分 .7%
一般默认 取有效数字时 四舍五入,不足的补零