• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 非常经典的C语言趣味题目

非常经典的C语言趣味题目

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了制度的力量 非常经典,契约精神 非常经典,别开错了窗户非常经典,非常完美经典语录,非常经典有深度的话等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

http://stevenkobes.com/ctest.html

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

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

image

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

第一题:

#include <setjmp.h>
static jmp_buf buf;
int main(void)
{
volatile int b = 3;
if (setjmp(buf) != 0)
{
printf("%d\n", 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("%d\n", *(int*)pt);
返回结果为3,这个算是比较简单,pt为指向结构s的指针,然后将pt转换为int指针,进行dereference,取出一个int值,那就是结构中第一个数。

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

第三题:

第四题:

第五题:

第六题:

第七题:

第八题:

第九题:

我将代码扩展了一下,看看大家能不能想到结果:

函数指针的数组p勉强算是一个知识点,另外一个知识点就是第八题提到的,对于int q这样的参数,是不会修改其内容的。而*p则可修改p

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 非常经典的C语言趣味题目

相关文章

  • 2017-05-28C++运行时获取类型信息的type_info类与bad_typeid异常
  • 2017-05-28Win10中VC2013安装Unit test组件出现问题解决方案
  • 2017-05-28C语言拓展实现Lua sleep函数
  • 2017-05-28SQL Server中的数据复制到的Access中的函数
  • 2017-05-28详解C++编程中的变量相关知识
  • 2017-05-28C++中的while循环和for循环语句学习教程
  • 2017-05-28C++开发的Redis数据导入工具优化
  • 2017-05-28c_str()的用法详细解析
  • 2017-05-28C++中函数模板的用法详细解析
  • 2017-05-28数据结构课程设计- 解析最少换车次数的问题详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++用mysql自带的头文件连接数据库
    • 使用c语言判断100以内素数的示例(c语言求素数)
    • 浅谈C++函数声明后面加throw()的作用(必看)
    • 详解数据结构C语言实现之循环队列
    • 动态数组C++实现方法(分享)
    • c++类的隐式转换与强制转换重载详解
    • C++中构造函数与析构函数的调用顺序详解
    • C++之类和对象课后习题简单实例
    • 用C语言获取文件的大小示例分享
    • 解析C++编程中如何使用设计模式中的状态模式结构

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有