- 下面字符串定义错误的是( A )
A. char p[5] = “hello”;
B. char p[] = “hello”;
C. char p[] = {‘h’ , ’e’ , ’l’ , ’l’ , ’o’};
D. char *p = “hello”;
解析:字符串需要包括字符串结束标识符’\0’,”hello”算上\0之后是6个字符,超出了定义的范围大小。 -
设char str[4][5];所定义的数组在内存中的起始地址为50,则数组元素str[3][3]的地址的十进制是( B )
A.65
B.68
C.58
D.59
解析:要注意是数组下标是从0开始的。
从str[0][0] 到str[3][3]有5 X 3 + 3 = 18个数据,又因为char为1字节,所以str[3][3]的地址为50 + 18 X 1 = 68。 -
若int占2个字节,char占1个字节,float占4个字节,sizeof(xc)大小是:( D )
A.16 B.18 C.22 D.20
struct stu
{
union{
char bj[5];
int bh[2];
}class;
char xm[8];
float cj;
}xc;
解析:内存对齐规定:结构体的总大小为结构体最宽基本类型成员大小的整数倍
可见最宽的是float是4.,数组的形式只是多个数据放在一起而已。
联合体里面总共是5个字节,要为4的倍数所以为8个字节,
所以为8+8+4=20 -
运行之后的输出结果:( C )
void main()
{
int I = 11;
int const *p = &I;
p++;
printf(“%d”,*p);
}
A. 11
B. 12
C. 垃圾值
D. 编译错误
解析:因为指针p存放的值为I的地址。P++之后,存放的地址并不知道指向哪里,所以打印p+1指向的值为垃圾值。 -
有栈s,按顺序ABCD进栈,则出栈顺序不可能的是( D )
A. DCBA
B. BACD
C. BADC
D. CABD
解析:栈是一种先进后出的数据容器。
例如选项A,先按ABCD的顺序进栈,然后顺序出栈即可实现。其他可以同理推理。 - 填空题:
1.4字节的int型的数据表示的范围 2^(-31) 到 2^31 - 1 .
2.在AT89C51单片机中,6MHZ的晶振,一个机器周期为 2 us .
解析:一个机器周期等于1/(6 X 10^6) X 12 = 2 X 10^(-6) s = 2 us。
3.十进制数-87的补码是 10101000 .
解析:-87的原码是11010111,变为补码符号位不变,其它位取反即可。
所以-87的补码为10101000
4.设a,b,c为整型数,且a=3,b=5,c=2,则执行完以下的语句:a *= 16 + (b++) – (++c);a的值 54 。
解析:b++使用完b = 5之后, b = 5 + 1 = 6,++c是c = 2 + 1 = 3之后才使用,所以a = a X (16 + 5 - 3)= 3 X 18 = 54
5.ICMP是 Internet控制报文 协议,属于网络协议层。
简答题:
1. TCP和UDP的区别?
解析:TCP:面向连接、可靠的通信方式,适用于传输大量数据、对可靠性要求高的场合。
UDP:无连接、不可靠的通信方式,但由于无连接,传送速度较快,适用于对可靠性要求不高、数据量较小,速度要求较快的场合。
-
51单片机的中断有哪几种,其地址分别是什么?
解析:51单片机的中断有5种,中断源包括外部中断0–0003H、定时/计数器0—000BH、外部中断1—0012H、定时/计数器1—001BH、串行口—002BH。 -
TCP通信三次握手的过程
解析:第一次:客户端向服务器发送syn包,并进入SYN_SENT状态,等待服务器确认。
第二次:服务器接收客户端发送的syn包,并对其SYN进行确认,同时自己也发送一个SYN包,此时服务器进入SYN_RECV状态。
第三次:客户端接收到服务器的返回包,对其进行确认,向服务器发送确认包。此动作完成后,服务器与客户端进入TCP连接状态,完成三次握手,可进行数据传输。 -
volatile关键字的作用?
解析:用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。
不使用volatile定义的变量,可能因为编译器优化而出现一些问题。
建议使用volatile变量的场所:
(1) 并行设备的硬件寄存器
(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)
(3) 多线程应用中被几个任务共享的变量