打印

关于递增(++)/递减(--)运算符

[复制链接]
7711|49
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lenglx|  楼主 | 2007-11-28 12:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于递增(++)/递减(--)运算符

记得几天前看到过一个帖子,是关于++运算符的.
大致是对于:

a = *p++;
a = *p(++);

这样2个语句的运行结果是一样的,感到不理解.


今天比较闲,想发个帖子讨论下这个.

只要你看过几本关于C或者C++的书,上面都会对++,--这2个运算符介绍下,你多多少少会知道它们的意思和用法.
书上会告诉你: 前置的++是先加,然后取出,后置的++是先取出,然后递加.
之后一般会有一两个例子,告诉你怎么用.

但更高级一点的例子就没有了.
你如果曾经写过向下面的程序:
    int i;
    ++++i;    //ok
    i++++;    //不能通过编译
一般的书上就找不到答案了.顶多告诉你不能那么做.至于为什么不能那么做,没有答案.


你说你不打算知道这些,你就只要知道"先加后取数","先取数后加"的概念就可以了,你不需要编那些代码.
但你总有需要看别人代码的时候,说不定就有那些语句, 不是?


以下是一些测试题目:

假设下面的变量是如下声明的.
    int i = 9;
    int ar[] = {1, 2, 3, 4};
    int * p = ar;
    int f(int x) {return x};

那么以下语句是否正确?能否通过编译?为什么?
如果能通过编译,那么运行后的结果是什么?为什么?

1>    i++++;
2>    ++i++;
3>    (++i)++;
4>    ++i = 5;
5>    i++ = 5;
    
6>    i = *p++;
7>    i = *(p++);
8>    i = (*p)++;
    
9>    i = ++f();

如果你能正确知道以上全部语句的结果,那么你才是真正理解了递增(++)/递减(--)运算符;


--------------- 待续

相关帖子

沙发
computer00| | 2007-11-28 13:01 | 只看该作者

晕...LZ果然很有空呀~~~

使用特权

评论回复
板凳
xwj| | 2007-11-28 13:04 | 只看该作者

呵呵,真要在程序中写出这样子的代码的,一律打屁股打到

使用特权

评论回复
地板
农民讲习所| | 2007-11-28 13:14 | 只看该作者

i++++++++++++++++++++++++++++++++++++;不知道能不能过

使用特权

评论回复
5
computer00| | 2007-11-28 13:15 | 只看该作者

哈哈~~~不知道i+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

使用特权

评论回复
6
hellomcu| | 2007-11-28 13:33 | 只看该作者

呵呵,都能过都能过

  呵呵,都能过都能过
   
  (注:此贴不承担责任后果)
相关链接:http://shotp35088126.taobao.com

使用特权

评论回复
7
ayb_ice| | 2007-11-28 13:46 | 只看该作者

这样的测验意义不大

使用特权

评论回复
8
古道热肠| | 2007-11-28 14:12 | 只看该作者

俺写代码不喜欢玩技巧

俺都用括号成双成对的把各种判断呀做完整。

使用特权

评论回复
9
xwj| | 2007-11-28 14:16 | 只看该作者

呵呵,和LS差不多

而且,对于可能有歧义的++ -- 我宁愿换行分开写:-)

使用特权

评论回复
10
lenglx|  楼主 | 2007-11-28 14:54 | 只看该作者

这是技巧?

个人以为,是一些很基本的概念.
上面所说,哪里用到了"技巧"这回事情?都是些极其简单的语句.只不过澄清一些概念而已.
编操作系统的时候, 象*--p=xx; *p++=xx; xx=*++p;这样的语句比比皆是,那是"技巧"运用?

如果说优先级,都用括号区分.个人持保留意见.括号多了,也不见到是好事.影响观看.对于显而易见的优先级, 括号没必要.

使用特权

评论回复
11
computer00| | 2007-11-28 15:00 | 只看该作者

呵呵,俺是懒人,懒得记,连乘法俺也喜欢用括号~~~安全,

傻人笨办法~~~哈哈~~~~~~

使用特权

评论回复
12
ayb_ice| | 2007-11-28 15:06 | 只看该作者

俺只知道*/高于+-,其它不清楚的用()

使用特权

评论回复
13
农民讲习所| | 2007-11-28 15:25 | 只看该作者

别想“茴”字几种写法,只要记住下面三种就够了

*p++
*++p
*(p+x)

使用特权

评论回复
14
lenglx|  楼主 | 2007-11-28 15:37 | 只看该作者

随便一说

农民讲习所 发表于 2007-11-28 15:25 侃单片机 ←返回版面    

14楼: 别想“茴”字几种写法,只要记住下面三种就够了 

*p++
*++p
*(p+x)
 
 
第一: 那不是一个"茴"字.

第二: 就算是个"茴"字, 知道几种写法也不不知道的好.
      你不用这个写法,不代表其它人不用这个写法.
      如果万一你不幸,要看别人写的东西,认识这个"茴"字总比埋怨别人"怎么使用那个茴字"的好.

第三: 套用你的说法:
      别想“茴”字几种写法,只要学会一种语言就够了.
      
      汇编.

      那么你就可以不理会这个世界上有C语言这回事了.

使用特权

评论回复
15
农民讲习所| | 2007-11-28 15:54 | 只看该作者

无语

连续无语中...............
while(1){ 无语;}
do{ 无语; }while(1)

使用特权

评论回复
16
lenglx|  楼主 | 2007-11-28 16:11 | 只看该作者

无语?

我才是那个无语的人.

平常没事的时候,我也逛这个论坛.
貌似看多过很多这样的回复,类似这种口气:
不要考虑"茴"字有多少种写法,你只需要知道什么什么, 怎么怎么做就可以了.

首先,这种答复不太友好.

其次,如果一个人在帖子提到了某个问题,一个不太常见的问题,肯定是他遇到了某个问题,虽然你可以认为那是一种可知道可不知道的问题,可那并不意味着那个问题其它人不需要知道.如果他不需要知道,他就不会提出这个问题了.




使用特权

评论回复
17
ayb_ice| | 2007-11-28 16:17 | 只看该作者

又要扯皮了。。。

使用特权

评论回复
18
hellomcu| | 2007-11-28 16:32 | 只看该作者

程序的规范性

个人认为产品开发的第一要务是可靠,第二要务是可维护(规范性)。
现在说的是规范性。
对规范性的要求大家理解不完成一致,但可见的是,把多个语句叠在一起使用利用一些缺省的优先级(好像在不同的编译环境,有些优先级的解释不是完成一致的),并不是那么有益的一件事。
相关链接:http://shop35088126.taobao.com

使用特权

评论回复
19
农民讲习所| | 2007-11-28 16:50 | 只看该作者

有些人就是比较敏感

自尊过头是自卑

使用特权

评论回复
20
computer00| | 2007-11-28 17:20 | 只看该作者

有点晕...楼主说得头头是道,不知道你自己有没有去试过的

有几个你说对了?有几个你说错了? 有几个你自己预算的结果跟编译器算出来的结果是一样的? 换个编译器又如何?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

186

帖子

1

粉丝