免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2272 | 回复: 9
打印 上一主题 下一主题

问个C下的++问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-02 21:17 |只看该作者 |倒序浏览
最近看了一本practial c的书,关于这道题:value = 1; result = (value++ * 5) + (value++  * 3)
我的系统是mac osx的在终端下这样写:
#include <stdio.h>
int value, result;

int main(){
     value = 1;
     result = (value++ * 5) + (value++  * 3);
     printf("result is %d value is %d", result, value);
     return (0);
}
这样执行后得到结果是result is 8 value is 2
接着这样写:
#include <stdio.h>

int main(){
      int value, result;
     value = 1;
     result = (value++ * 5) + (value++  * 3);
     printf("result is %d value is %d", result, value);
     return (0);
}
得到的结果是result is 8 value is 3
对value的值觉得有点不理解,怎么上面只++一次,而下面的写法却++两次?
哪位精通的能不能回答一下.

论坛徽章:
0
2 [报告]
发表于 2007-08-02 21:32 |只看该作者
不推荐这种写法。
一个表达式里面有同个变量的两次或两次以上的自增自减运算,好像在不同的编译器里面可能得到不同的结果。

论坛徽章:
0
3 [报告]
发表于 2007-08-02 21:33 |只看该作者
一本正确的书应该告诉大家,
永远不要在同一个语句里,对一个变量做超过一次的++

论坛徽章:
0
4 [报告]
发表于 2007-08-02 21:35 |只看该作者
不要研究这种写法了
也不要这样写代码.

论坛徽章:
0
5 [报告]
发表于 2007-08-02 21:38 |只看该作者
同意

论坛徽章:
0
6 [报告]
发表于 2007-08-03 09:55 |只看该作者
支持楼上几位的回复。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2007-08-03 10:03 |只看该作者
原帖由 jaffaz 于 2007-8-2 21:32 发表
不推荐这种写法。
一个表达式里面有同个变量的两次或两次以上的自增自减运算,好像在不同的编译器里面可能得到不同的结果。

行为未定义,说过好多次了,建议看下 comp.lang.c FAQ。

论坛徽章:
0
8 [报告]
发表于 2007-08-05 19:33 |只看该作者
谢谢各位前辈们 的答复,因为我初学C,刚刚接触编程.好像MMMIX版主有点不耐烦,不好意思,真的是初学C,请照顾一下.

论坛徽章:
0
9 [报告]
发表于 2010-04-26 15:56 |只看该作者
前一个程序中,int value,result;是定义在main函数之前的,是全局变量;而后一个程序是定义在main函数中的,属于局部变量;前一个程序中value加了一次,而后一个程序加了两次的原因就是全局变量和局部变量的区别引起的。

论坛徽章:
0
10 [报告]
发表于 2010-04-26 16:05 |只看该作者
这种一个语句,同一个变量++,——多次的,不要研究了。没意思。
C标准里,这种行为的结构是未定义。真要较真,其结构具体根据编译器会不一样。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP