一道编程题让老程序员邹起了眉头,这样的题你会怎么解?

对程序员来说,程序的魅力在于它的变化无穷,对于一门计算机语言来说,他的基础语法是固定有限的,可是编程的花样却是千变万化,无法穷举,可以用它做出无数个不同领域,不同业务,形形色色的产品,正因为这么灵活,关于编程的题目,也是自然很多,想必面试过的程序员都见过各种各样的面试题,有简单的,有“造火箭”的,有非常挑战大脑思考力的等等,近期,一名程序员网友就被一道编程题难住了,他把这样的题目分享给了大家。


根据这名程序员的分享,可以看出应该是c++编程题,不过重在考察程序员的思路,是考察程序员的思考能力,题目内容如下图,具体的操作要求是在pass函数中进行一番操作,然后使得第二个打印语句输出

456,这个题目看上去很一般,不过与往常我们的情况不一样的地方是pass函数并不可以传参,传引用什么的,第二个方法如何改变x值呢?针对这样的情况,让我们看看有没有程序员网友可以给出让人眼睛一亮的方案吧!


网友一:pass函数里面print 456,然后exit。 保证屏幕第二个打印的是456

上世是朵花:这么做输出的结果与想要的结果是一样的,不过请注意审题,题目中的要求是:“使得第二个打印语句输出 456”,你这算是阻止了第二个语句的打印,重新伪造了一个打印语句。

网友二:64位系统gcc 测试通过。不同编译器和系统会有所不同。int tmp; *(&tmp+8) = 456;

上世是朵花:虽然没验证这段代码,但是已经看出这名网友的思路是通过内存寻址的方式改变x的值,这是一个思路。

网友三:在C中调函数会创建一个栈帧,栈帧范围是2指针(rbp,rsp)确定,栈扩张是从地址高到低,在pass中定义变量x1,地址减去一定值访问main中的x。这个值跟编译时优化程度有关。g++ -O2优化,会省掉创建栈帧的指令和内存分配,x的地址即x1减int宽度。可以在pass中加两行:int x1;*reinterpret_cast(reinterpret_cast(&x1)-sizeof(int)) = 456;使用g++ -O2 -std=cpp11编译

上世是朵花:这名网友说出了实现的思路,核心思想与网友二差不多,但是考虑到的更细致一点。

网友四:从上面的回答可以看出你们这些程序员c语言基础之差。

上世是朵花:评论题目就行,评论人就不友好了。

网易员工:第二个打印语句不一定是主函数里面的第二个printf吧

上世是朵花:这不就是“网友一”的思路么?

网友六:这是脑筋急转弯吧。

上世是朵花:这名网友是这么认为的,看你怎么看了。

腾讯员工:如果是单解这道题,就从pass里的临时变量地址往上遍历,发现了123的值,就姑且认为就是那个x了,然后改成456。不过这类题很古董了,现在写业务代码的同学大把都不知道。

上世是朵花:有道理,除了遍历寻址的方式好像还真想不到其他更好的办法。

网友八:用堆栈溢出来做的我一律不通过。这叫ub,ub的东西你也能告诉我这是正确的?

上世是朵花:这名网友diss了一部分网友,不过更期待的是你能给出高明的办法。

从上面网友的评论中可以看出两种思路,一种是通过“障眼法”的方式达到与预期结果一致,这个思路也是很值得赞的,不过仔细审题的话,有点不符合题目中的要求,第二种思路是通过内存寻址的方式找到x的指针位置,然后给其赋值456,这种做法是符合了题目中的要求,不过在我们实际做项目中,这样的方法我们都不会去用的,因为在实际项目中,变量之多,使用指针是很危险的一个行为了,最后很可能会出现一些很奇怪的问题,还不好找原因,这也是为什么好多高级计算机语言中废除了c++中指针这个特性的原因,顶多是会用一用引用,指针就完全废弃了,当然,这只是一道面试题,只要符合要求就行,也不需要考虑的太多,那么接下来,我抛出一个问题,面试官出这样的问题又是想考察程序员的什么呢?请说出你的看法来,下方评论区欢迎你!


以上所有图片均来之互联网   

大家好,我是“上世是朵花”。如果你有什么好的看法或者观点可以在评论区展现你的才华,互动交流,如果想进一步了解我,那就关注我吧!                           

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 1、你已经意识到中年危机了吗?有什么征兆?你是如何看待他们的? 一般的来说,爱情婚姻会经历四个时期:(1) 浪漫期...
    喜欢空谷幽兰阅读 359评论 0 0
  • 【昨夜的梦】 窄窄的路上,我和朋友一起健步如飞,我跑在第一个,途遇一条长长的蛇,吐着红红舌头正朝我爬来,我一个急刹...
    张子羽阅读 638评论 5 11