鱼C论坛

 找回密码
 立即注册
查看: 2232|回复: 3

关于c自加自减的疑惑

[复制链接]
发表于 2014-6-20 00:06:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>
void main()
{
    int i=8;
    printf("%d\n",++i);
    printf("%d\n",--i);
    printf("%d\n",i++);
    printf("%d\n",i--);
    printf("%d\n",-i++);
    printf("%d\n",-i--);
}
这时甲鱼老师的课件练习题,前3个还能理解,从第4个开始就不明白了,求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-6-20 01:07:37 | 显示全部楼层
目测结果为9,8,8,9,-8,-9,解释以注释形式给出

#include <stdio.h>
void main()
{
    int i=8;                                               //i的值为8,不解释
    printf("%d\n",++i);                           //++i表示将整形变量i的值加一,在‘;’的之前那个序列点完成自加操作,因为,i的值为8,所以++i的值为9,此时i的值已经为9
    printf("%d\n",--i);                            //同上,--i表示将整形变量的值减一,在‘;’的之前那个序列点完成自减操作,但是由于i的值9,所以--i的值为8,i的值也已经为8
    printf("%d\n",i++);                          //自增规则同上,不过,序列点的位置由本句的‘;’之前变成了本句的‘;’之后,下一句的’;‘之前,这就是说,当printf函数调用结束的时候,i的值依旧是8,但是当printf函数调用结束后,下一个语句结束前的某个瞬间,i的值变为9,所以结果为8
    printf("%d\n",i--);                            //同上可知,当printf函数调用结束的时候,i的值为9,所以输出的结果为9,到下一个printf语句之前,i的值已经成为8    printf("%d\n",-i++);                        //上句结束后,i的值为8,可参考第三句,所以的值本句中i++的结果为8,但是i++的前面有取负运算符,所以结果为-8,同上,当语句结束而下语句未结束之前,i的值变为9(i++时,i的值是8)
    printf("%d\n",-i--);                          //因为i的值是9,且由上可知“i--”这一运算在本句结束前不影响i的值,所以对i的值取负,结果为-9,所以全部输出如上
}

下面,我来介绍序列点这个概念:
序列点,指的是相对于编译器系统来说的一个瞬间,在那之前,所以序列点之前(上一个序列点之后)的副作用都应该被实现,(所谓副作用,是指修改变量的值的访问,不改变变量的值的访问被称为透明访问),在本例中,自增/减运算符的作用效果为副作用,所以在相应的序列点之前实现其副作用,然而,本例中的序列点只存在于每个语句的结尾,即’;‘处,所以以’;‘为准,分割各变量的副作用顺序,就可以知道改变时刻语句的执行情况了

满意请采纳,不满意请追问

评分

参与人数 1鱼币 +5 贡献 +3 收起 理由
怀念部队 + 5 + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-6-20 21:27:53 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-6-20 23:35:41 | 显示全部楼层

回帖奖励 +2 鱼币

怀念部队 发表于 2014-6-20 21:27
怎么把币给你啊????

如果回答满意,采纳就好了,希望我的回答能帮到你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 12:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表