C语言夺命题十例,为啥C语言的总是这么恶趣味?

前言

这些问题测试了C语言的高级知识,包括一些很少使用的特性。有效的C编程需要对诸如未定义的行为,递归和指针算术等概念有深入的理解,但是这些故意复杂的例子并不代表现实世界的代码,当然也不会为了清晰和可维护性而获得任何奖励。

在这些问题上的表现不是一个更好的软件开发能力指标。因此,他们不太可能在面试环境中有用。(学校貌似就喜欢做这样的事情,哈哈)。

主要内容

如果你是大学生,保证这道题你就会丧命,不是小编危言耸听。

1.如图所示程序的输出是什么?

涨姿势:

结果:5

该setjmp函数存储“非本地goto”的上下文信息,返回0.该longjmp函数将控制转移到已setjmp初始化的调用buf,并且从这一点继续执行,就好像setjmp返回了1。

注意:之后被修改的非易失性自动变量setjmp变得不确定longjmp。没有volatile限定词,这个程序的行为将是不确定的。这个规则允许更好的代码优化。

好了接着给你来点接地气的题吧,如果你结构体学的不错,我想这题应该没什么难度

小编给大家推荐一个学习氛围超好的地方,C/C++交流企鹅裙:870963251!适合在校大学生,小白,想转行,想通过这个找工作的加入。裙里有大量学习资料,有大神解答交流问题,每晚都有免费的直播课程

2.如图所示程序的输出是什么?

涨姿势:

结果:3

struct 的成员按顺序排列在记忆中。如果指向a的指针转换struct为指向其第一个成员的指针的类型,则结果指向其第一个成员。

3.如图所示程序的输出是什么?

涨姿势:

结果:2 5

既然a有类型数组[5]了,int,&a就有类型指针数组[5]了int。因此&a + 1产生的指针(不存在)阵列[5]的int自带后a,并ptr指向(不存在)int附带之后a。从中减去1 ptr产生一个指向最后一个元素的指针a。

注意:一般来说,不能使用非空指针的值不指向有效的对象。但是,指向数组末尾的指针是一个例外。这使ptr合法的初始化,即使它不能被解除引用。

4.如图所示程序的输出是什么?

涨姿势:

结果:9

在中foo,b有指向数组[3]的类型指针int,并在增量后指向数组a[1]()。所以b[1]有类型数组[3] int,它表示数组a[2]()。在值上下文中,b[1]“decay”成一个指向a[2][0](7)的指针,所以b[1][1]表示a[2][1],其值从8变为9。

好了看了上面4题也辛苦阅读的你了,接下来做个基础不过的程序了。

5.如图所示程序的输出是什么?

涨姿势:

结果:c=3 d=5

逗号运算符评估两个操作数并生成第二个值。它的优先级也低于赋值。因此c = a, b相当于c = a,而d = (a, b)相当于d = b。

好了看这么多了,我们不妨研究点有意思的新东西,在C++11 标准中有可变长参数的函数,接下来就看一看这样的使用。

如果你能耐心看题到这里,说明你是一位非常专注与C/C++的学习者或者成功者,有兴趣不妨关注代码下的学习场所。

6.如图所示程序的输出是什么?

涨姿势:

结果:5

该va_arg宏产生的“传递参数...”一个可变参数函数的一部分。在ripple它将被调用两次,i首先设置为5,然后到7。

表达式i &= i - 1重置最右边的1位i。例如,如果i是6(二进制110),i & i - 1则是4(二进制100)。内部for循环执行到i0,所以k增加了1位的数量i。

5(二进制101)和二进制111(二进制)中有两个1位,所以ripple返回5。

7.如图所示程序的输出是什么?

涨姿势:

结果:cd

在f,p最初指向指针数组中的第一个char*("ab")argv。添加sizeof(int)= 2 p使其指向第三个char*("ef"),之后p[-1]表示第二个char*("cd")。

8.如图所示temp是什么类型?

这题其实很简单,不过一般大学生很少看到

涨姿势:

结果:指向函数的指针取两个指针float参数并返回int

该typedef声明为一个类型创建一个同义词,然后可以用它来声明该类型的对象。注意这个类型的新名字出现在一个变量名的位置上,好像你正在声明一个变量(你不知道)。与#define指令的语法相比,这可以使其看起来倒退。

9.如图所示程序的输出是什么?

涨姿势:

结果:0 1 2 0

在伪代码中(接触下伪代码吧)

e(0), e(-1) -> {}

e(1) -> -> {{}, print 0, {}} ->

e(2) -> -> {, print 1, {}} ->

e(3) -> -> {, print 2, } ->

10.如图所示程序的输出是什么?

涨姿势:

结果:2 3 5 6

在这里,a有数组[3]的类型数组[2] int,ptr最初指向第一个数组[3]()。增量后,它指向第二个数组[3]()。当然,*ptr表示ptr正好指向的数组[3] 。

总结

个人总结

涉及高级部分内容总结:

1.结构体与结构体指针

2.指针,数组

3.宏定义与指针函数

4.函数

5.字符串数组

6.可变长参数函数

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏noteless

[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

说起来好像很啰嗦,但是如果有人告诉你 通过sin(x) 计算后, x的值被改变了,你不会觉得异常奇怪么

1122
来自专栏AzMark

Python函数

2097
来自专栏Crossin的编程教室

【Python 第18课】 bool类型转换

昨天最后留的几句关于bool类型的转换,其中有一行: bool('False') print一下结果,会发现是True。这是什么原因? 因为在pytho...

2474
来自专栏AI科技大本营的专栏

10分钟快速入门Python函数式编程

本文,你会了解到什么是函数式编程,以及如何用 Python 进行函数式编程。你还会了解到列表解析和其他形式的解析。

1292
来自专栏编程

关于python字典类型最疯狂的表达方式

[译]关于python字典类型最疯狂的表达方式 一个Python字典表达式谜题 这个子字典是从哪里来的 Umm..好吧,可以得到什么结论呢? 一篇来自 Dan ...

21110
来自专栏云霄雨霁

设计模式----工厂方法模式

1440
来自专栏编程

详解 Python的enumerate 函数

你应该在何时何地,如何使用内置的 enumerate() 函数来写出更加简洁、更加具有 Python 范儿的循环结构呢? ? Python 的 enumerat...

2267
来自专栏C++

python笔记:#007#变量

1022
来自专栏转载gongluck的CSDN博客

python笔记:#007#变量

变量的基本使用 程序就是用来处理数据的,而变量就是用来存储数据的 目标 变量定义 变量的类型 变量的命名 01. 变量定义 在 Python 中,每个变量 在...

3338
来自专栏编程

Python变量作用域

今天我们要说的是:变量的作用域 什么是作用域呢? 作用域就是某一个事件或者物体在某种情况下产生的特定的作用或效果(画外音:能不能说人话?) 好吧,那常老师来举个...

2106

扫码关注云+社区

领取腾讯云代金券