阿里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

相关推荐

02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
2025-12-18 19:36
已编辑
门头沟学院 Java
程序员牛肉:可以的,简历没毛病了。 虽然还是偏向同质化,不过学历不错。后续我觉得重心放到刷实习+摆脱同质化问题上
实习简历求拷打
点赞 评论 收藏
分享
评论
4
20
分享

创作者周榜

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