免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: philonis
打印 上一主题 下一主题

请问一个奇怪的现象,关于print [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-11-16 18:11 |只看该作者
原帖由 angleeye 于 2005-11-16 17:59 发表

  1. $i=100;
  2. print ($i++)*2;
  3. print "n";
  4. print  2*($i++);
复制代码

兄弟们试试这段...


呵呵!怕怕!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
12 [报告]
发表于 2005-11-16 18:56 |只看该作者
原帖由 POLOGG 于 2005-11-16 17:38 发表
C语言的标准中对于与++相结合的定义是十分模糊的

是非常明确的。

论坛徽章:
0
13 [报告]
发表于 2005-11-16 19:44 |只看该作者
  1. C语言的标准中对于与++相结合的定义是十分模糊的,具体的结果是和具体的编译器相关的
复制代码


不是这样的

论坛徽章:
0
14 [报告]
发表于 2005-11-16 19:49 |只看该作者
c 语言中是非常精确的 ,不可能模糊
++i 表示加了之后使用,
i++ 表示先使用然后i加上1

论坛徽章:
0
15 [报告]
发表于 2005-11-16 19:52 |只看该作者
原帖由 angleeye 于 2005-11-16 19:49 发表
c 语言中是非常精确的 ,不可能模糊
++i 表示加了之后使用,
i++ 表示先使用然后i加上1


错了哦,要看用在什么环境。
对任何独立的语句,i++与++i是一样的。
只有用在大型表达式的上下文里,2者才有区别。

论坛徽章:
0
16 [报告]
发表于 2005-11-16 21:07 |只看该作者

回复 15楼 兰花仙子 的帖子

c 语言中是非常精确的 ,不可能模糊
++i 表示加了之后使用,
i++ 表示先使用然后i加上1

看来要给你们写得更清除些,
++i和i++都要执行i=i+1;
区别是++i如果用在另外的表达式中就使用(i+1)来计算,而i++则是用i来计算,
基本的东西很明确,不会错的

论坛徽章:
0
17 [报告]
发表于 2005-11-16 22:09 |只看该作者
原帖由 angleeye 于 2005-11-16 21:07 发表
c 语言中是非常精确的 ,不可能模糊
++i 表示加了之后使用,
i++ 表示先使用然后i加上1

看来要给你们写得更清除些,
++i和i++都要执行i=i+1;
区别是++i如果用在另外的表达式中就使用(i+1)来计算,而i++则是用i ...


  1. #include <stdio.h>
  2.       2 #include <string.h>
  3.       3
  4.       4 int
  5.       5 main( int argc, char *argv[] )
  6.       6 {
  7.       7         int i = 1;
  8.       8
  9.       9         printf( "%d,%d,%dn", i++ , i++, i++ );
  10.      10
  11.      11         i = 1;
  12.      12
  13.      13         printf( "%d,%d,%dn", ++i,++i,++i );
  14.      14 }
复制代码

结果是:
3,2,1
4,3,2
环境是gcc 3.2.2


解释一下吧!

其实我的意思就是在printf中的这些个i++(++i)的之间的顺序是模糊的!先用哪一个不定!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
18 [报告]
发表于 2005-11-16 23:43 |只看该作者
原帖由 POLOGG 于 2005-11-16 22:09 发表


[code]
#include <stdio.h>
      2 #include <string.h>
      3
      4 int
      5 main( int argc, char *argv[] )
      6 {
      7         int i = 1;
      8
      9        ...

这个和 ++ 没关系。
你这个例子只能说明函数调用时,参数入栈的顺序是没有规定的。
++ 的作用是很明确的。标准里有,不会含糊不清的。

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
19 [报告]
发表于 2005-11-17 10:46 |只看该作者
原帖由 flw 于 2005-11-16 17:36 发表
楚楚引的什么破书啊,越说越乱套。


如果你使用括号,一个简单的规则是 (偶尔会令人吃惊):如果是函数,没有优先级的问题;如果它是一个数组运算符或者一元运算符

那么就要考虑优先级。并且,函数两边的空白和 "(" 是不计算的--因此,有时候需要小心行事。看看下面的几个例子:

    print 1+2+4;        # Prints 7.
    print(1+2) + 4;        # Prints 3.
    print (1+2)+4;        # Also prints 3!
    print +(1+2)+4;        # Prints 7.
    print ((1+2)+4);        # Prints 7.

前面说得似乎有点抽象,那么你在运行PERL时带上-w开关你将得到一些警告信息,您可以根据这些信息再体会一下。例如,上面的例子会产生如下信息:

    print (...) interpreted as function at - line 1.
    Useless use of integer addition in void context at - line 1.

有些函数根本不需要参数,因此工作方式和一元运算符和数组运算符都不同, time 和 endpwent算是两个典型吧. 如, time+86_400 实际上是time() + 86_400.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP