阿里c/c++一面面试题

因为之前刷牛客时没有看到过这样的题,故将这道题分享给大家


输出结果应该是?说明为什么


#阿里巴巴##笔试题目#
全部评论
去学习了一下,来献个丑: 两个要点: 1. printf的操作是从右到左计算表达式的值,将返回值(地址)存入相应的缓存区。表达式计算完毕后,将所有缓存区按计算顺序入栈,依次弹栈输出。 2. 对于返回值,前置++i返回的是i变量本身的地址,而后置i++返回的是临时缓存区的地址(我们知道i++是先返回i再+1) 问题本身: 1. printf("%d, %d\n", ++i, ++i); 两个++i依次计算后,由于printf缓存区里存的就是i本身的地址,因此输出的就是i的最终值3。 2. printf("%d, %d\n", ++i, i++); 先计算i++:开辟临时地址,存入加之前的值3,将该地址存入缓存区; 再计算++i:将i的地址存入缓存区,此时i是5。
点赞 回复 分享
发布于 2019-05-09 11:44
这种未定义行为的题根本就没有客观确定性。你只需知道这题涉及知识点的是:printf函数参数入栈顺序大部分是自右向左,mac是自左向右。以及及自增运算的返回值是前置左值后置右值即可。然后具体的输出情况视编译器而定,因为表达式的参数是统一求值完毕**栈,还是单个运算后即时入栈,这是未知的。还有对于后置自增来说,如果同时出现多个变参操作,是表达式运算过程中变参,还是语句结束后统一变参这也是未知的。
点赞 回复 分享
发布于 2019-05-12 20:14
https://blog.csdn.net/u014644714/article/details/77688321 这是比较详细的解答
点赞 回复 分享
发布于 2019-05-09 11:31
花里胡哨的....
点赞 回复 分享
发布于 2019-05-09 11:10
这个问题你只能说在C99以上的标准下进行运行,或者特指linux编译器下,就算++本身在本题中不会出现歧义,但是函数进栈的顺序是不同的,在C98中就是从左往右的,不要将一个题扣下来断章取义,我刚才就是这个问题拿出来瞬间被打脸,不同编译器跑的结果五花八门,所以记住我这个惨痛的教训,一定要注明环境问题
点赞 回复 分享
发布于 2020-04-15 21:22
在线求解答
点赞 回复 分享
发布于 2019-05-09 11:20
所以为什么
点赞 回复 分享
发布于 2019-05-09 11:16

相关推荐

点赞 评论 收藏
分享
来,说点可能被同行“骂”的大实话。🙊当初接数字马力Offer时,朋友都说:“蚂蚁的“内包”公司?你想清楚啊!”但入职快一年后的今天,我反而对他有了不一样的看法!🔹 是偏见?还是信息差!之前没入职之前外面都在说什么岗位低人一等这类。实际上:这种情况不可至否,不能保证每个团队都是其乐融融。但我在的部门以及我了解的周边同事都还是十分好相处的~和蚂蚁师兄师姐之间也经常开一些小玩笑。总之:身份是蚂蚁公司给的,地位是自己挣的(一个傲娇女孩的自述)。🔹 待遇?玩的就是真实!试用期工资全额发!六点下班跑得快(早9晚6或者早10晚7,动态打卡),公积金顶格交。别听那些画饼的,到手的钱和下班的时间才是真的(都是牛马何必难为牛马)。🔹 能不能学到技术?来了就“后悔”!我们拥有权限直通蚂蚁知识库,技术栈多到学不完。说“学不到东西”的人,来了可能后悔——后悔来晚了(哈哈哈哈,可以不学但是不能没有)!💥 内推地址:https://app.mokahr.com/su/ueoyhg❗我的内推码:NTA6Nvs走我的内推,可以直达业务部门,面试流程更快速,进度可查!今天新放HC,之前挂过也能再战!秋招已经正式开始啦~机会就摆在这,敢不敢来试一试呢?(和我一样,做个勇敢的女孩)
下午吃泡馍:数字马力的薪资一般哇,5年经验的java/测试就给人一万出头,而且刚入职第三天就让人出差,而且是出半年
帮你内推|数字马力 校招
点赞 评论 收藏
分享
评论
4
20
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务