CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  非技术区

今天在书上看到一道题目没看明白

楼主tri_stone(XHL)2006-03-04 12:38:23 在 C/C++ / 非技术区 提问

printf("%d",++x,x++);,上面说这个是对的,“%d”,++x,x++是函数printf的三个实参数,我不理解,大家能给我详细点的解释吗,谢谢啦:)  
  还有printf("%d",a=a+1,b--,c+1); 问题点数:100、回复次数:14Top

1 楼shaoboailinglijun(邵波爱凌丽君)回复于 2006-03-04 12:44:33 得分 8

“%d”是说输出的一个整数;  
    ++x是递增的前置,意思是加一个1再输出;  
    x++是递增的后置,意思是输出后再加1。  
  Top

2 楼tri_stone(XHL)回复于 2006-03-04 12:48:30 得分 0

这个我知道啊,我的意思是,后面是++x,x++是两个,前面的"%d"也应该是两个啊,后面应该和前面对应啊Top

3 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-04 14:49:20 得分 8

会不会是逗号表达式,不常用的。写成这样会不会好看一点:  
  printf("%d",++x,x++);     ==>     printf("%d",(++x,x++));  
  printf("%d",a=a+1,b--,c+1);     ==>   printf("%d",(a=a+1,b--,c+1));  
  PS:鄙视一下写出这样代码的人,建议看看代码风格相关的书。  
  Top

4 楼lovefreex(笨わ孩)回复于 2006-03-04 14:52:10 得分 8

严重同意楼上的观点,代码风格很重要Top

5 楼Rick_ang(东方未名)回复于 2006-03-04 15:19:00 得分 6

是逗号表达式Top

6 楼kikikind(可乐)回复于 2006-03-04 15:32:27 得分 5

printf是标准输出库函数呀!!~~~~~其实也是在调用函数!!Top

7 楼dx30611(想要clean code)回复于 2006-03-04 15:42:08 得分 4

显然是逗号表达式,表达式的结果是最后一个的结果Top

8 楼theory88(伟)回复于 2006-03-04 15:57:15 得分 8

举八只手同意是逗号表达式!Top

9 楼ox_thedarkness()回复于 2006-03-04 16:06:30 得分 7

....不是逗号表达式  
   
  这道题目是错误的。  
  函数调用只有一个求值顺序点,所有参数表达式运算顺序、以及其副作用顺序是不确定的。  
   
   
  前几天还有人问了类似问题,bs这些出书误人子弟的作者和出版社们。  
  问题讨论贴见:  
  http://community.csdn.net/Expert/topic/4583/4583943.xml?temp=.4103052  
   
  最终结论:  
  http://blog.csdn.net/ox_thedarkness/archive/2006/03/01/613122.aspxTop

10 楼ox_thedarkness()回复于 2006-03-04 16:08:52 得分 6

有兴趣,但是没精力全篇阅读标准的话,也不想读那篇结论或者有异议的话,  
  找ISO   C99   标准,看下面这里:  
   
  [C99]   6.5.2.2   Function   call    
          条款12   EXAMPLE   在下面的函数调用中:  
   
  (*pf[f1()])     (   f2(),   f3()   +   f4()   )  
   
          函数   f1   f2   f3   和f4   可能以任何顺序被调用。   但是,所有副作用都必须在那个   pf[   f1()   ]   返回的函数指针产生的调用前完成。  
  Top

11 楼mfs(玩命蚂蚁)回复于 2006-03-04 16:13:37 得分 10

printf("%d",++x,x++);  
  这个是逗号表达式,输出最右边的值.如果x=1,刚输出2,而X的值最后变成了3Top

12 楼houdy(致力于图像/图形领域,成为有思想的程序员)回复于 2006-03-05 09:55:04 得分 10

int   i   =   0;  
  printf("%d\n",++i,i++);  
  printf("%d\n",i);  
  我在WinXP   +   SP2,   VS2003下测试了一下,编译可以通过,运行的结果是都是2。不知道这样的接过能说明什么问题?Top

13 楼zhNKUjw(淡淡的云彩悠悠的游)回复于 2006-03-05 10:01:57 得分 10

不是逗号表达式Top

14 楼ox_thedarkness()回复于 2006-03-05 10:54:20 得分 10

-       -   结果说明,VS7   对本代码,在你的上下文代码下,在你当前选择的编译选项下,结果是2。  
  不能说明其他任何东西。Top

相关问题

  • 一道不明白的数组题目
  • 一道试题 题目都部明白
  • 一道题目
  • 一道题目.......
  • 一道题目
  • 一道题目
  • 一道题目
  • 一道题目,有答案,但看不明白。请各位大哥解析一下!!!
  • 高人来看:一道让人想不明白的VC++题目,大家都来看一下。(VC6环境)
  • 问一道题目

关键词

  • .net
  • 函数
  • 代码
  • 逗号表达式
  • 调用
  • 输出
  • 顺序
  • 书
  • printf
  • 意思

得分解答快速导航

  • 帖主:tri_stone
  • shaoboailinglijun
  • houdy
  • lovefreex
  • Rick_ang
  • kikikind
  • dx30611
  • theory88
  • ox_thedarkness
  • ox_thedarkness
  • mfs
  • houdy
  • zhNKUjw
  • ox_thedarkness

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo