一套帮助你理解 C 语言的测试题,欢迎使用!

本文提供了一套C语言测试题,涵盖了包括setjmp/longjmp、指针、递归、内存管理和函数指针等多个核心概念。通过解答这些题目,可以帮助你深入理解和掌握C语言。
摘要由CSDN通过智能技术生成

在 steven kobes 上发现一套很有趣的C语言测试题,如果你招聘C语言相关开发人员,或者正在学习C语言,很值得做一做。

如果没有做,下面内容暂时不要看,最好自己先完成一遍。

OK,假设你做的答案没有完全正确,那你可以继续看下去了,否则,后面内容对你来说就是小菜一碟,不值得看。

第一题:

#include

static jmp_buf buf;

int main(void)

{

volatile int b = 3;

if (setjmp(buf) != 0)

{

printf("%dn", b);

exit(0);

}

b = 5;

longjmp(buf, 1);

}

输出结果为A)3 B)5 C)0 D)都不是

答案为B,也就是输出5。

关键点在于理解setjmp以及longjmp,(http://en.wikipedia.org/wiki/Setjmp.h )第一次运行到setjmp,会设置jmp_buf,然后返回0。当调用longjmp时,会把longjmp里面的非0值作为setjmp的返回值返回(如果longjmp的value参数为0,setjmp恢复后返回1,也就是当恢复到setjmp存储点的时候,setjmp一定不会返回0)。

setjmp-longjmp组合的用处类似于游戏中的存盘读盘功能,经常被用于类似C++的异常恢复操作。

第二题:

struct node

{

    int a;      

    int b;      

    int c;

};

struct node s = { 3, 5, 6 };

struct node *pt = &s;

printf("%dn", *(int*)pt);

返回结果为3,这个算是比较简单,pt为指向结构s的指针,然后将pt转换为int指针,进行dereference,取出一个int值,那就是结构中第一个数。

我们将题目改动一下,如下代码:

struct node

{

    char a;  

    char b;  

    short c;  

    int d;

};

struct node s = { 3, 5, 6, 99 };

struct node

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值