鱼C论坛

 找回密码
 立即注册
查看: 3558|回复: 14

[技术交流] 有关 *a++ 问题 ~

[复制链接]
发表于 2013-6-3 09:22:47 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 catch 于 2013-6-3 11:38 编辑

经过做实验发现 b = *a++ 这个问题不容易比较,我们来做一下 b = *++a 这个实验,执行过程如下(编译平台:code::blocks)

源代码.jpg

运行结果如下:

运行.jpg


因此是先执行 a++ , 再执行 *(a++)~{:1_1:}

多谢 鱼友-我是师兄 QQ图片20130603113713.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-3 09:57:22 | 显示全部楼层
*p++
=====
*(p++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 10:23:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-3 10:30:02 | 显示全部楼层
catch 发表于 2013-6-3 10:23
请问一下,你做实验了?

我帮你解释一下
为什么*p++ 是*(p++)
因为 *和++优先级同级 然后是右结合
所以是*(p++)

我再帮你解释
为什么 *(p++)
看起来是先*p 而不是*(p+1)
因为 p++这个表达式的值还是 p
p+=1那个是++的副作用
这个副作用和表达式的值没关系
对于*来说 他的操作数是 p++
p++的值是p
那么 *操作数就是p了
*p

实验 应该有根据 而不是有感觉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-3 10:31:43 | 显示全部楼层
:D看看!!!!!!!!!!!!!!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 10:44:52 | 显示全部楼层
我是师兄 发表于 2013-6-3 10:30
我帮你解释一下
为什么*p++ 是*(p++)
因为 *和++优先级同级 然后是右结合

最好还是做一下实验,实践是检验真理的唯一标准~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-3 10:51:06 | 显示全部楼层
catch 发表于 2013-6-3 10:44
最好还是做一下实验,实践是检验真理的唯一标准~

汗 怎么做实验
你看懂我的回复了没有

你说 *p++不是*(p++) 那么 *p++应该是什么

我知道实验结果的确 是会和你的实验结果一样 但是 我说的是
你是实验根据

如果 n1 和 n2的值一样,那么先执行 *b,再执行*b++;
如果 n1 和 n2的值不一样,那么先执行 b++,再执行*b;

这个说法是错误的

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

使用道具 举报

发表于 2013-6-3 11:22:05 | 显示全部楼层
catch 发表于 2013-6-3 11:08
有的鱼友说 b = *a++ 的执行顺序是 :
先执行 a++,再执行*a

n2 = *b++ , 如果先执行b++话,那么n2的值将是一个随机值,当然n4也是一个随机值~


n2 = *b++ ,如果先执行*b的话,  那么n2==n1 , n4也将是一个随机值~

你这个想法根本错误

没学会 ++ 运算符吗
请问 b++ 这个表达式的值是什么??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 11:22:50 | 显示全部楼层
我是师兄 发表于 2013-6-3 10:51
汗 怎么做实验
你看懂我的回复了没有

你好,我看了一下你说的也有道理,可是运行结果就是那样,那又怎么解释呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 11:24:03 | 显示全部楼层
好吧,隐隐约约这个实验有瑕疵,错在什么地方请高人指点~{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-3 11:29:00 | 显示全部楼层
catch 发表于 2013-6-3 11:22
你好,我看了一下你说的也有道理,可是运行结果就是那样,那又怎么解释呢?

*T
T是一个表达式的求值结果
*(p++)
*的操作数是 p++
表达式 p++ 的求值结果是 p
那么 *(p++) 的求值结果和 *p是一样的

p+1那个是++运算符的副作用 和 求值是平行无关的另一件事
不要混淆了 操作数的值和表达式的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 11:40:04 | 显示全部楼层
好吧,这个实验让我醒悟了~:L
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-3 13:31:14 | 显示全部楼层
谢谢分享 向你学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-6-4 01:08:40 | 显示全部楼层
学习学习.......................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-7-25 22:28:11 | 显示全部楼层
看懂,不过希望以后能和大家在鱼C里一起学习!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 10:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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