C语言的恶趣味,胆小者莫入,以免入门到放弃,C语言夺命题十例!

前言

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

0?wx_fmt=jpeg

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

主要内容

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

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

0?wx_fmt=jpeg

涨姿势:

结果:5

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

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

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

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

0?wx_fmt=jpeg

涨姿势:

结果:3

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

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

0?wx_fmt=jpeg

涨姿势:

结果:2 5

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

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

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

0?wx_fmt=jpeg

涨姿势:

结果:9

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

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

0?wx_fmt=jpeg

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

0?wx_fmt=jpeg

涨姿势:

结果:c=3 d=5

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

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

0?wx_fmt=jpeg

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

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

0?wx_fmt=jpeg

涨姿势:

结果: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.如图所示程序的输出是什么?

0?wx_fmt=jpeg

涨姿势:

结果:cd

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

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

0?wx_fmt=jpeg

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

涨姿势:

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

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

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

0?wx_fmt=jpeg

涨姿势:

结果:0 1 2 0

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

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

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

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

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

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

0?wx_fmt=jpeg

涨姿势:

结果:2 3 5 6

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

总结

个人总结

虽然只有小小的10题,但是如果你耐心看完,不难发现其实里面基本上包含了C语言学习的所有高级部分内容。如果你现在正在学习C/C++ 看不懂,没关系,如果你学完,还是没见过,那说明你C语言学的有点太难看了.如果想要更多的有意思,高质量的学习内容,不妨相聚在C/C++学习群。让我一起在99816772成长,进步。

涉及高级部分内容总结:

1.结构体与结构体指针

2.指针,数组

3.宏定义与指针函数

4.函数

5.字符串数组

6.可变长参数函数

0?wx_fmt=jpeg



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

java学习里程碑miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法。 可以创建然后跟踪基于天或基于距离的目标。 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活动。 您还可以找出本地跑步者并与他们联系。 该项目已开始,…

遇C语言条件编译就犯怵,不知什么意思,c语言头文件中的宏定义

前言看见头文件中的条件编译就犯怵,不知什么意思,但是,你老师说:”就得那么写“,你照做,但是知其然而不知其所以然。今天分享下是自己的理解~~~纯属个人献丑,新手可阅,老鸟绕道。代码…

pcie3.0一条通道带宽_小技巧|内存双通道提升性能

今天给大家分享一个小技巧,如果你的电脑有两条或以上的内存条,不同的内存插法也是会影响性能的哦,也就是内存双通道。什么是双通道?双通道内存说白了是两条内存由串联方式改良为并联方式,以得到更大的内存带宽&#xf…

C++简介源码讲解精辟版,C++入门级C++学习,C++与C的区别值得知晓

C简介源码讲解精辟版,C入门级C学习,C与C的区别值得知晓C语言和C基础区别C标准输入和输出命名空1.命名空间的定义 :namespace 标识符{ } 例:namespace my{int a1;}命名空间中的成员访问:作用域分辨符:: 例&a…

jbpm 和 drools_Drools和jBPM KIE A​​pps平台

jbpm 和 drools随着Drools和jBPM(KIE)6系列出现了一个新的工作台,并有望最终实现用户的可扩展性。 我终于有了一些预告片,以显示此工作原理以及所存储的内容。 确保选择1080p并全屏显示它们的最佳状态。 (点击放大&am…

mysql 1308_Mysql恢复数据报ERROR 1308 : LEAVE with no matching label_MySQL

赶紧看备份日志,日志如下:----------------------------------BEG:20151108 01:00:01FTP:20151108 01:00:05CLS:20151108 01:00:07OPT:20151108 01:00:08END:20151108 01:00:08----------------------------------日志并没有什么异常,既然说有…

真正的C与C++编程高手是什么?臭美的群体!如何编写高质量代码?

前 言软件质量是被大多数程序员挂在嘴上而不是放在心上的东西!除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C/C程序怎么会有那么多的毛病?”别难过,作者只…

windows10安装mysql 8.0_手把手教你在Windows 10安装MySQL 8.0(详细图文)

出品丨TeacherWhat题图:Oracle MySQL 8.0关键字:新版本、Install、安装、MySQL、数据库入门、Database正文约1000字,建议阅读时间2分钟目录结构:1. 官网下载安装包2. 点击下载的程序包安装3. 安装数据库软件4. 安装成功后&#xf…

mysql降低数据库版本_三步10分钟搞定数据库版本的降迁 (将后台数据库SQL2008R2降为SQ...

三步10分钟搞定数据库版本的降迁 (将SQL2008R2降为SQL2005版本) 前思后想仍觉得实战数据库版本的降迁一文中的方式不仅老土而且低效,故有了下文三步搞定数据库从MSSQL2008R2 高版本降迁至SQL2005低版本。 整个过程如果思路清晰,数据量小,不过…

2017菜鸡C与C++工程师总结,撸码撸码,垃圾专科生撸码人生

前言年底了,对工作做一个总结。又要感叹那句话啊,时光流水,仿佛昨天才刚毕业,到今天不知不觉已经正式工作半年了。文章以po主自己的心理想法和所见所闻入手来写,垃圾专科生,文笔不好勿怪。开始正文吧。关于…

primefaces_PrimeFaces 5.0 DataTable列切换器

primefaces我有机会与PrimeFaces 5.0 DataTable一起工作,并且增强功能很棒。 今天,我只想展示其中的一项新功能……DataTable列切换器。 通过此功能,可以通过复选框列表选择显示哪些列。 要使用列切换器,只需添加一个commandButt…

Docker化Spring Boot应用程序

你好朋友, 在本教程中,我们将看到如何对Spring Boot应用程序进行Docker化。通过dockerizing意味着我们将以Docker容器的形式运行应用程序。 以下是涉及的步骤: 1.创建一个Spring Boot应用程序 2.在您的机器上安装Docker 3.在您的项目中创…

抱歉咯!今天偷个懒!!

今天偷个懒向大家推荐一个新建的C/C学习交流群。应为新建群人数不是很多,正在学习C/C或者正在寻求进阶的小伙伴都可以加下。作为群主会不时在群内分享学习资料的。

openshift_在WildFly和OpenShift上的WebSocket聊天

openshift聊天是解释WebSocket的最典型示例之一。 它是一个相当常用的界面,可以很容易地解释WebSocket的基本概念。 当然,Java EE 7 WebSocket也有一个, 在这里可用 ! 您可以使用以下步骤在WildFly上轻松运行它: curl…

linux 下脚本安装 mysql_linux(centos7)下编译安装mysql(数据库)一键安装详解+脚本文件...

一、下载源文件官网下载地址: https://downloads.mysql.com/archives/community/二、安装前准备(1)、开始之前先把虚拟机内存调大,避免安装时间过长和卡慢此处我调的内存为8个G(我的Windows内存为12G),如果你的电脑没有这么大运行内存可适度调小&#xf…

为什么学习C语言这么久,看的懂代码,做不出题,写不出来项目?

前言我看得懂别人的程序,可是我自己却写不出来,我应该怎么办啊?你了解这些嘛?你只是能从别人书写的代码知道每一步都做些什么吧?你明白别人的解题思路吗?你知道别人为什么要用那样的算法吗?如果…

如何在AWS中启动EC2实例

你好朋友, 在本教程中,我们将看到如何立即在AWS中旋转EC2实例。 您应该可以访问AWS控制台。如果您还没有AWS账户,则可以单击此处并在AWS上创建免费套餐。 如何在AWS中启动EC2实例 步骤1 : 使用您的凭证登录到您的AWS账户。 第…

git提交过滤package.json_eclipse配置git环境以及使用git提交本地仓和远程仓

一、Eclipse上安装GIT插件EGitEGit插件地址:http://download.eclipse.org/egit/updatesOK,随后连续下一步默认安装就可以,安装后进行重启Eclipse二、在Eclipse中配置EGitPreferences > Team > Git > Configuration注意这里的user.na…

C语言求一元二次方程的根,这题很简单嘛?看看这种想法很惊奇!

数学基础:一元二次方程只含有一个未知数(一元),并且未知数项的最高次数是2(二次)的整式方程叫做一元二次方程。标准形式为:axbxc0(a≠0)。求解公式:求根公式法用求根公式…

新手学C语言会踩到什么样的坑?

C语言因为是很多计算机大学生的必修课,所以这门编程语言的小白很多,很多萌新都在学习的过程中流下了无数心酸的泪水。例如刚开始学习的“hello world”程序,这基本上是每个人踏入程序员的第一步,很多人的雄心壮志就是从这里开始的…