鱼C论坛

 找回密码
 立即注册
查看: 3264|回复: 15

求助一个c基础问题,来自小鱼老师的扩展阅读

[复制链接]
发表于 2018-2-7 19:51:24 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>

int main()
{
        int a = 5;

        ++(a++);

        return 0;
}

小鱼老师在lvalue扩展阅读里指出这个会报错,试过确实报错了,但++(a++),为什么是++(5),而不是++(6),不是很理解,望知晓的朋友指点,谢谢啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-7 20:19:33 From FishC Mobile | 显示全部楼层
因为后置++就是先取值再自增
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 21:24:59 | 显示全部楼层
  我觉得初学 不要去较劲 ++i 或者 i++    尽量规避他们之间的区别, 他们的目的都是一样的 就是 i = i + 1, 只是执行生效的时间不同罢了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 21:42:26 | 显示全部楼层
a++是先进行运算,运算完之后再对a进行自加。
++a是先进行自加,自加完之后再进行其他的运算。
所以     当a=5 时  ++(a++)
先小括号中a++ 先运算后自加,所以括号里面还是5
该表达式的结果应该就是++5
我是这么理解的,不知道正不正确
还有不明白报错是为什么,  
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-7 21:55:21 | 显示全部楼层
求楼主的编程软件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 23:18:15 | 显示全部楼层
BngThea 发表于 2018-2-7 20:19
因为后置++就是先取值再自增

谢谢解答,那就是尽管有小括号,但执行起来都是先取变量值,再运算a++?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 23:19:10 | 显示全部楼层
Z皮皮 发表于 2018-2-7 21:42
a++是先进行运算,运算完之后再对a进行自加。
++a是先进行自加,自加完之后再进行其他的运算。
所以      ...

报错应该是++运算符不能直接运用在费变量上,我是这样理解报错的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 23:20:56 | 显示全部楼层
Z皮皮 发表于 2018-2-7 21:55
求楼主的编程软件

Visual Studio Community 2017,个人学习用~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-7 23:22:59 | 显示全部楼层
风过无痕丶 发表于 2018-2-7 21:24
我觉得初学 不要去较劲 ++i 或者 i++    尽量规避他们之间的区别, 他们的目的都是一样的 就是 ...

嗯,谢谢,初学容易钻牛角尖,哈哈,想尽快了解背后运算的原理~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 02:21:56 | 显示全部楼层
pypsrand 发表于 2018-2-7 23:18
谢谢解答,那就是尽管有小括号,但执行起来都是先取变量值,再运算a++?

不太懂诶

#include <stdio.h>

int main()
{
        int a = 5;
        ++a;
        return 0;
}

这个为什么不报错呢,++符不是也是直接运用在常量上吗。

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

使用道具 举报

发表于 2018-2-8 02:23:48 | 显示全部楼层
pypsrand 发表于 2018-2-7 23:19
报错应该是++运算符不能直接运用在费变量上,我是这样理解报错的

回复错了。。

我想问一下这里。

#include <stdio.h>
int main()
{
        int a = 5;
        ++a;
        return 0;
}

这个为什么不报错呢,++符不是也是直接运用在常量上的吗。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-8 07:53:00 From FishC Mobile | 显示全部楼层
pypsrand 发表于 2018-2-7 23:18
谢谢解答,那就是尽管有小括号,但执行起来都是先取变量值,再运算a++?

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

使用道具 举报

发表于 2018-2-9 09:56:30 | 显示全部楼层
a98 发表于 2018-2-8 02:23
回复错了。。

我想问一下这里。

++a;是作用于变量,++5才是作用于常量,++(a++)这里小括号内返回的值是常量5,读取出来是++(5);所以报错,自增自减运算符不能作用于常量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-9 10:45:00 | 显示全部楼层

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

使用道具 举报

发表于 2018-2-9 10:45:36 | 显示全部楼层
夯昊 发表于 2018-2-9 09:56
++a;是作用于变量,++5才是作用于常量,++(a++)这里小括号内返回的值是常量5,读取出来是++(5);所 ...

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

使用道具 举报

发表于 2018-2-9 18:12:07 | 显示全部楼层
pypsrand 发表于 2018-2-7 23:20
Visual Studio Community 2017,个人学习用~

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 09:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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