野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17331|回复: 2

C语言面试笔记(四)

[复制链接]
发表于 2016-9-8 09:06:58 | 显示全部楼层 |阅读模式
50.进程间通信的途径:共享存储系统 消息传递系统 管道:以文件系统为基础
51.进程死锁的原因:资源竞争及进程推进顺序非法

52.死锁的四个必要条件:互斥、请求保持、不可剥夺、环路

53.死锁的处理:鸵鸟策略、预防策略、避免策略、检测与解除死锁

54.操作系统中进程调度策略有哪几种:
——FCFS(先来先服务),优先级,时间片轮转,多级反馈

55.ISO的七层参考模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
应用层 表示层 会话层 运输层 网络层 物理链路层 物理层
tcp /udp属于运输层
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
与 TCP 不同, UDP 并不提供对 IP 协议的可靠机制、流控制以及错误恢复功能等。由于 UDP 比较简单, UDP 头包含很少的字节,比 TCP 负载消耗少。
tcp: 提供稳定的传输服务,有流量控制,缺点是包头大,冗余性不好
udp: 不提供稳定的服务,包头小,开销小

56.如何引用一个已经定义过的全局变量?
              可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。(不要问我什么是编译期间,什么是连接期间,请自己查资料)

57.测试方法:
              人工测试:个人复查,抽查和会审
              机器测试:白盒测试,黑盒测试
58.下面代码里,假设在32位系统下,各sizeof计算的结果分别是多少?
              int *p=NULL;
              sizeof(p)的值是__________(1)
              sizeof(*p)的值是__________(2)
              int a[100);
              sizeof(a)的值是_________(3)
              sizeof(a[100])的值是__________(4)
              sizeof(&a)的值是_________(5)
              sizeof(&a[0])的值是________(6)

int b[100];
void fun(int b[100])
{
   sizeof(b);
}
sizeof(b)的值是________(7)
答:除(3)答案为400以外,别的答案都为4。

59.下面两段代码有什么区别?什么时候需要使用代码(2)?
       代码(1):
       inti=10;
       it j=i;
       int k=i;
代码(2):
volatile int i=10;
int j=i;
int k=i;
答:代码(1):这时候编译器对代码进行优化,因为在代码(1)的两条语句中,i没有被用作左值(没有被赋值)。这时候编译器认为i的值没有发生改变,所以在第1条语句时从内存中取出i的值赋给j之后,这个值并没有被丢掉,而是在第2条语句时继续用这个值给k赋值。编译器不会生成出汇编代码重新从内存里取i的值(不会编译生成装载内存的汇编指令,比如ARM的LDM指令),这样提高了效率。但要注意:两条语句之间i没有被用作左值(没有被赋值)才行。
代码(2):volatile关键字告诉编译器i是随时可能发生变化的,每次使用它的时候必须从内存中取出i的值,因而编译器生成的汇编代码会重新从i的地址处读取数据放在k中。
代码(2)的使用时机:如果i是一个寄存器变量、表示一个端口数据或者是多个线程的共享数据,那么就容易出错,所以说volatile可以保证对特殊地址的稳定访问。

60.0x01<<2+3的值是多少?为什么?
——32。因为加号的优先级比移位运算符的优先级高。

61、定义一个函数宏,求x的平方。
#define  SQR(x) ((x)*(x))
该语句有缺陷,传入++a这样的内容则函数宏失效。

62.如果在一个程序中调用了printf函数却不包含头文件,例如int main(void) {printf("\n"); },编译时会报警告:warning: incompatible implicit declaration of built-in function‘printf’。请分析错误原因。
      在C语言标准中有些库函数被定义为内建函数(bulit-int-function),不需要包含相应头文件,比如printf等。个人理解为,编译器编译时,没有看到函数原型,就根据调用形式作了隐式申明。但是结果隐式声明的函数原型和库文件里的不对应,所以会报imcompatible警告。

63.定义变量时可以把相同类型的变量列在一起,而定义参数却不可以?
因为在函数原型声明时,只需要参数类型,不需要参数名称。如果一个参数类型后有多个参数,编译器只会认为只有一个参数。而不是多个参数。

64. 写两个表达式,分别取整型变量x的个位和十位:x=x%10  x=x%100/10

65.x=x+1,x+=1,x++哪个效率最高?
——x=x+1最低,因为它的执行过程如下1)读取右x的地址(2)x+1 (3)读取左x的地址(4)将右值传给左边的x
——x+=1其次,其执行过程如下:(1)读取右x的地址 (2)x+1 (3)将得到的值传给x(因为x的地址已经读出)
——x++效率最高,其执行过程如下:(1)读取右x的地址 (2)x自增1

66.有两个变量a,b不用判断语句找出两个数中间比较大的?
——方案一:
intmax = ((a+b)+ abs(a-b))/ 2
——方案二:
int c= a - b;
char*str[2] = {“a大”,“b大”};
c =unsigned(c) >> (sizeof(int)*8 - 1);

67.如何判断一段程序是由c编译程序还是c++编译程序编译的?
——c编译时定义了_STDC_,c++编译时定义了_cplusplus

68.#includeSQR(x) (x*x)—— SQR(b+2)=b+2*b+2



回复

使用道具 举报

发表于 2016-9-8 10:03:04 | 显示全部楼层
过来学习下,楼主好有心,写了这么多
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 10:26:42 | 显示全部楼层
冷千秋 发表于 2016-9-8 10:03
过来学习下,楼主好有心,写了这么多

多总结才能学到更多,不然看过的东西都忘记了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-16 16:50 , Processed in 0.040921 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表