C语言-题目
单选题:
32位机系统关于sizeof 的使用不正确的是 __
【A】 int count=0; 【B】 int count=0;
sizeof(count); sizeof int;
【C】 int count=0; 【D】 int count=0;
sizeof count ; sizeof(int);
【参考答案】B不正确 sizeof作为C语言的关键字,当计算变量的大小时,括号可以省略,但是计算数据类型的括号不能省略,会出现编译出错。
以下程序的输出结果是:
#define ADD(x) (x)+(x)
main()
{ int a=4,b=6,c=7,d=ADD(a+b)*c;
printf(“d=%d”,d);
}
【A】 d=70 【B】 d=140 【C】 d=280 【D】 d=80
【参考答案】D
本题主要考察编程规范,宏定义中如果包含表达式或变量,表达式和变量必须用小括号括起来。在宏定义中,对表达式和变量使用括号,可以避免可能发生的计算错误。
#define ADD(x) (x)+(x) 如果写作:#define ADD(x) ((x)+(x)) 就不会造成计算错误了
有如下程序该程序的执行结果是
void main(void)
{
int x=23;
do
{
printf("%d",x–);
} while(!x);
}
【A】321 【B】23【C】不输出任何内容【D】陷入死循环
答案【B】
以下程序在 Win32 系统下的运行后的输出结果是 A
void main(void)
{
int A = 1,B = 2;
int C = (A<<32)|B;
printf("%d",C);
}
【A】3 【B】2
【C】4 【D】1
【参考答案】A
当移位的位数超过该数值类型的最大位数时,编译器会用移位的位数去模类型的最大位数,然后按余数进行移位,例如:当前的int最大32位,因此左移的实际操作是: int i = 1, j = 1; i = i << 33;/* 33 % 32 = 1 左移1位,i变成2 */
j = j << 32; /* 32 % 32 = 0 左移0 位,j 还是1 */
本例中, A<<32操作之后的值仍是1; 因此最后C = 1 | 2 = 3;
32 位体系结构下,下列函数f 的返回值为:
int f()
{
char str[] = “ZTE COPR”;
char *p = str;
int i = 4;
return sizeof(str) + sizeof§ + sizeof(i) + sizeof(*p);
}
【A】18 【B】30 【C】25 【D】11
【参考答案】A
sizeof(str) =9 char str[] = “ZTE GGSN”;中还有字符串结束符’0/’
sizeof§ win32下指针的为4字节
sizeof(i) win32下 int变量为4字节
sizeof(*p) *p为char
填空题:
以下程序的输出显示是 Got a valid pointer
char *ptr;
if ((ptr = (char *)malloc(0)) == NULL)
puts(“Got a null pointer”);
else
puts(“Got a valid pointer”);
【参考答案】 Got a valid pointer
考察malloc(0)返回时最小对齐的内存块指针,指针是有效的
结构体Book1与Book2如下定义,在64位系统下,sizeof(Book1)= *24* ,sizeof(Book2)= *168* 。
typedef struct Book1{
char title[5];
char author[5];
char subject[10];
int book_id;
} Book1;
struct Book2{
char *title[5];
char *author[5];
char *subject[10];
int book_id;
};
考察结构体成员最小对齐原则
以下程序运行后的输出结果是: 4
#include <stdio.h>
int fun()
{
static int x=1;
x=x*2;
return x;
}
void main()
{
int i,s=1;
for(i=1;i<=2;i++)
{
s=fun();
}
printf("%d\n",s);
}
【参考答案】4
static int x=1 定义的是静态变量,存储区域是数据段中,函数返回后数据保留。
*第1题 单选题 正则表达式*
类型:单选题
难度:中
题目:PCRE模式“abc+?xyz ”可以匹配以下哪个字符串?
选项1:abcabcyz
选项2:abcabc+xyz
选项3:abcabxyz
选项4:abcabcccccxyz
正确答案:4
解答:考察正则表达式的基本知识。
第一,c+表示c字符至少出现一次;
第二,c+xyz表示一个或多个c字符后边只能跟xyz;
第三,c+?xyz中的?,是非贪婪的意思,默认+是贪婪的,+?是非贪婪的。但是放在这个题目里,只是为了混淆视听,并无实际意义。答题者如果不了解贪婪/非贪婪的知识,就会迷惑。
*第10题 单选题 正则表达式*
类型:单选题
难度:中
题目:以下哪种开源软件,可用于大量正则模式的高速匹配,从而实现与ZXDPI软件多模引擎类似的功能?
选项1:PCRE
选项2:Intel DPDK
选项3:Intel HyperScan
选项4:libpcap for linux/winpcap for windows
正确答案:3
解答:考察正则表达式的实现方面的知识。
第一,正则表达式匹配分为单模和多模两种方式,比如:有一个HTTP请求报文到来,有10000条正则表达式特征需要与该报文匹配。那么,单模方式下要对该报文匹配10000次;多模方式下仅对该报文仅匹配一次即可。我们的网络设备需要高性能,不能采用单模方式,只能采用多模方式。
第二,PCRE是通用正则表达式库,可以认为是一种单模匹配引擎。不能用于高性能网络设备。
第三,Intel DPDK是高性能网络收发的库。与正则表达式匹配无关。
第四,Intel HyperScan是Intel开源的多模的正则表达式库,很多公司都是直接集成该库提供高性能的多模正则表达式匹配功能。
第五,libpcap/winpcap是Linux/Windows上的旁路方式的抓包库。与正则表达式匹配无关。
*第11题 多选题 HTTP/2*
类型:多选题
难度:中
题目:相对于HTTP/1.1,HTTP/2引入了哪些新特性?
选项1:请求Pipelining
选项2:首部压缩
选项3:服务器推送
选项4:二进制编码
选项5:单TCP连接多路复用
正确答案:2345
解答:考察对HTTP/1.1协议、HTTP/2协议的了解知识。
选项一Pipelining是HTTP/1.1引入的机制。
其余选项都是HTTP/2引入的新机制。
*第14题 多选题 TLS 1.3*
类型:多选题
难度:难
题目:对于以下哪些协议,ZXDPI协议识别引擎可从其流量中,获取HTTPS网站数字证书的CN、O、OU等信息?
选项1:SSL 3.0
选项2:TLS 1.0
选项3:TLS 1.1
选项4:TLS 1.2
选项5:TLS 1.3
正确答案:1234
解答:考察对TLS 1.3的知识了解。
第一,对于TLS 1.3之前的版本,SSL/TLS握手阶段的流量中会出现的CN、O、OU等信息,因为承载这些信息的Certificate消息不是加密的,所以这些信息可以作为DPI特征用于协议识别。
第二,TLS 1.3版本,引入了对不需要明文的信息都尽可能加密的原则,所以握手阶段很多消息都被加密了,其中Certificate消息也被加密了,加密后就不能用于DPI识别了。
*第17题 判断题 TCP*
类型:判断题
难度:难
题目:启用TCP Nagle算法有助于提高5G网络中应用的数据传输速度。
正确答案:错
解答:考察TCP、5G的基本原理和知识。
TCP Nagle用于改善低速网络的吞吐量效率,可以理解它是将小的数据(比如1个字节、2个字节)积攒到一定量(如一个MSS)才发送出去,这会造成长度小的数据无法及时实际发送出去,相当于降低了数据传输速度,这个TCP特性对实时类交互(比如:云游戏、VR游戏)可能有负面影响。
*判断题*
int (*p)[4]它表示p是一个指针数组,它包含4个指针变量元素。(F)
任何表达式语句都是表达式加分号组成的。(T)
一个变量的数据类型被强制转换后,它将保持被强制转换后的数据类型。(F)
*选择题:*
int x = -1; if (x < 0u) 和 if (x > 1)分别为
a. false, false
b. false, true
c. true, false
d. true, true
答案:A
*填空题:*
int * p1=(int *)0x0500;
int * p2=(int *)0x0518;
int value=p2-p1;
printf("%d",value);
输出为:
答案:6
每日一贴
6-1
以下程序在Win32系统下的输出结果是 D
1.struct X
2.{
3. short a[3];
4. long b;
5.}_x;
6.struct Y
7.{
8. char c;
9. char ddd;
10. short dd;
11. struct X d;
12. double e;
13.}_y;
14.struct Z
15.{
16. char c;
17. short dd