| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1940 人关注过本帖
标题:m++和++m在表达式中的计算问题
只看楼主 加入收藏
醉游人
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2017-6-4
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:3 
m++和++m在表达式中的计算问题
我的问题是关于  m++和++m在表达式中的计算问题,
代码如下:
程序代码:
#include <stdio.h>

int main()
{
    int a=2,x=2,p,q;
    p=(a++)+(a++);
    q=(++x)+(++x);
    printf("a=%d,x=%d,p=%d,q=%d\n",a,x,p,q);
   

    return 0;

 } 
编译运行结果为:
图片附件: 游客没有浏览图片的权限,请 登录注册


我现在是这么理解的:
(1)书上写m++这个表达式的结果是m+1以前的结果,副作用是使m+1; ++m这个表达式的结果是m+1以后的结果(当然m也+1);
(2)对于p=(a++)+(a++)这个式子,
   第一个 a++的结果是2,之后a+1,a变为3;
   第二个 a++就是在a=3的基础上计算,a++的结果是3,之后a+1变为4;
   所以 对于a=4,p=5 我是理解的。(当然有可能理解的不对,结果碰巧对了,这里也需要请大家指导);
(3)对于q=(++x)+(++x)这个式子,
   第一个 ++x的结果是x+1以后的结果,即3,同时x变为3;
   第二个 ++x的结果以x=3为基础,所以 ++x是4,同时x也等于4;
   按照这种理解,x=4, q=7. 这与编译运行的结果不一致,编译运行后q实际为8.

 所以,对于 m++, ++m这种表达式在运算过程中到底是怎么个顺序呢?

搜索更多相关主题的帖子: 表达式 计算 编译 运行 结果 
2017-08-22 11:20
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:10 
这是未定义的,所以没有研究的价值,让谭浩强那个垃圾去死吧。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-08-22 11:43
醉游人
Rank: 2
等 级:论坛游民
帖 子:15
专家分:10
注 册:2017-6-4
收藏
得分:0 
回复 2楼 renkejun1942
好的,我就不纠结这个了。
2017-08-22 15:53
lmlm1001
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:4
帖 子:107
专家分:550
注 册:2015-3-1
收藏
得分:0 
to 楼主:
        把++m 和 m++ 单独作为一个表达式或者不产生冲突的表达式的一部分,是没有问题的。
        比如 a = ++m; 和 a = m++;  都知道准确的结果。
        但是对于诸如  a = (exp1) + (exp2); 的表达式,先计算exp1 还是exp2,就要看具体的编译和执行环境了。
        实际的工作中,这样的代码执行效果未定义,但是编写者的结果是有且只有一个定义。
        所以你看的书,最好是不要看了。
2017-08-22 21:35
快速回复:m++和++m在表达式中的计算问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016203 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved