面试试题

  1. 下面字符串定义错误的是( 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个字符,超出了定义的范围大小。
  2. 设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。

  3. 若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

  4. 运行之后的输出结果:( 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指向的值为垃圾值。

  5. 有栈s,按顺序ABCD进栈,则出栈顺序不可能的是( D )
    A. DCBA
    B. BACD
    C. BADC
    D. CABD
    解析:栈是一种先进后出的数据容器。
    例如选项A,先按ABCD的顺序进栈,然后顺序出栈即可实现。其他可以同理推理。

  6. 填空题:
    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:无连接、不可靠的通信方式,但由于无连接,传送速度较快,适用于对可靠性要求不高、数据量较小,速度要求较快的场合。

  1. 51单片机的中断有哪几种,其地址分别是什么?
    解析:51单片机的中断有5种,中断源包括外部中断0–0003H、定时/计数器0—000BH、外部中断1—0012H、定时/计数器1—001BH、串行口—002BH。

  2. TCP通信三次握手的过程
    解析:第一次:客户端向服务器发送syn包,并进入SYN_SENT状态,等待服务器确认。
    第二次:服务器接收客户端发送的syn包,并对其SYN进行确认,同时自己也发送一个SYN包,此时服务器进入SYN_RECV状态。
    第三次:客户端接收到服务器的返回包,对其进行确认,向服务器发送确认包。此动作完成后,服务器与客户端进入TCP连接状态,完成三次握手,可进行数据传输。

  3. volatile关键字的作用?
    解析:用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。
    不使用volatile定义的变量,可能因为编译器优化而出现一些问题。
    建议使用volatile变量的场所:
    (1) 并行设备的硬件寄存器
    (2) 一个中断服务子程序中会访问到的非自动变量(全局变量)
    (3) 多线程应用中被几个任务共享的变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值