C语言电话面试试题,C语言常见面试试题9.doc

C语言常见面试试题9

1)?下面的测试题中,认为所有必须的头文件都已经正确的包含了 ????2)数据类型???? ????????char?一个字节?1?byte ????????int?两个字节?2?byte?(16位系统,认为整型是2个字节) ????????long?int?四个字节?4?byte ????????float??四个字节4?byet ????????double?八个字节?8?byte ????????long?double?十个字节?10?byte ????????pointer?两个字节?2?byte(注意,16位系统,地址总线只有16位) 第1题:?考查对volatile关键字的认识 #include

#include

#include static?jmp_buf??buf; //初始化为0main()??? { ??volatile??int?b; ??b?=3; ??if(setjmp(buf)!=0)?? ??{ ????printf("%d?",?b);?? ????exit(0); ??} ??b=5; ??longjmp(buf?,?1); }?? 请问,这段程序的输出是 (a)?3 (b)?5 (c)?0 (d)?以上均不是 第1题:???(b) volatile字面意思是易于挥发的。这个关键字来描述一个变量时,意味着给该变量赋值(写入)之后,马上再读取,写入的值与读取的值可能不一样,所以说它"容易挥发"的。 这是因为这个变量可能一个寄存器,直接与外部设备相连,你写入之后,该寄存器也有可能被外部设备的写操作所改变;或者,该变量被一个中断程序,或另一个进程 改变了. volatile?不会被编译器优化影响,在longjump?后,它的值是后面假定的变量值,b最后的值是5,所以5被打印出来. setjmp?:?设置非局部跳转?/*?setjmp.h*/ Stores?context?information?such?as?register?values?so?that?the?lomgjmp?function?can?return?control?to?the?statement?following?the?one?calling?setjmp.Returns?0?when?it?is?initially?called. Lonjjmp:?执行一个非局部跳转?/*?setjmp.h*/ Transfers?control?to?the?statement?where?the?call?to?setjmp?(which?initialized?buf)?was?made.?Execution?continues?at?this?point?as?if?longjmp?cannot?return?the?value?0.A?nonvolatile?automatic?variable?might?be?changed?by?a?call?to?longjmp.When?you?use?setjmp?and?longjmp,?the?only?automatic?variables?guaranteed?to?remain?valid?are?those?declared?volatile. Note:?Test?program?without?volatile?qualifier?(result?may?very) 更详细介绍,请参阅?C语言的setjmp和longjmp ? 第2题:考查类型转换 main() { ???struct?node? ???{ ?????int?a; ?????int?b; ?????int?c;????? ???}; ???struct?node??s=?{?3,?5,6?}; ???struct?node?*pt?=?&s; ???printf("%d"?,??*(int*)pt); } 这段程序的输出是: (a)?3 (b)?5 (c)?6 (d)?7 第2题:???(a) 结构题的成员在内存中的地址是按照他们定义的位置顺序依次增长的。如果一个结构体的指针被看成它的第一个成员的指针,那么该指针的确指向第一个成员 ? ? 第5题:考查多维数组与指针 void?foo(int?[][3]?);? main() { ??int?a?[3][3]=?{?{?1,2,3}?,?{?4,5,6},{7,8,9}}; ??foo(a); ??printf("%d"?,?a[2][1])

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值