[问题] 运算子顺序

楼主: blueblueChen (蓝蓝欠)   2016-07-29 14:03:58
int array[3] = {9,6,10}
int *ptr = array;
*ptr++=3;
ptr[0] ptr[1] ptr[2] 各是多少?
网上搜寻 printf("%d",*ptr++);
印出 9 后,ptr 再做++动作,也就是下一个 ptr 会是指到 6 的位址
那请问 *ptr++=3 这个式子,他是先做++动作还是先做 assign 动作呢?
谢谢。
一直搞不清楚 ++ 到底是最后做还是...先做~"~
作者: azureblaze (AzureBlaze)   2016-07-29 14:14:00
程式不要这样写,别管什么顺序
作者: kyuudonut (善良老百姓)   2016-07-29 14:23:00
是不会直接拿debugger做测试吗……
作者: hichcock (快乐一整年 ^^~~~)   2016-07-29 14:51:00
为什么要用 "搞不清楚" 的语法, 先搞清楚再用不是很好
作者: CoNsTaR ((const *))   2016-07-29 16:12:00
一样是 right-left rule 就能解决的东西啊…
作者: LPH66 (-6.2598534e+18f)   2016-07-29 16:55:00
right-left rule 不是拿来判断优先度的这里的优先度顺序是 postfix++, deref*, =所以前半的结果为 ptr 所指位置, = 后该位置为 3故 array[0] 为 3; ptr 在此后往后移一格, 故 ptr[0] 取得array[1] 为 6, 同理 ptr[1] 为 10, ptr[2] 为不知道啥东东
作者: Ommm5566 (56天團)   2016-07-29 17:07:00
括号阿干
楼主: blueblueChen (蓝蓝欠)   2016-07-29 17:11:00
Android hal 层这样写,不懂他这样写法,自己做测试
作者: CoNsTaR ((const *))   2016-07-29 17:11:00
我记得 right-left rule 的确可以判断 unary operator的优先度喔…是发明这方法的那个印度人自己讲的
楼主: blueblueChen (蓝蓝欠)   2016-07-29 17:13:00
想要了解,却发现我自己无法解释,这样我androidcode 无法完全懂他意思
作者: CoNsTaR ((const *))   2016-07-29 17:17:00
这个一眼就该看出来的东西 有些人自己没学好看不太不懂就像听不懂英文就不准别人说英文一样 说中文阿干你讲英文 听不懂的人怎么办 你母语中文 讲英文自己不会很困扰
楼主: blueblueChen (蓝蓝欠)   2016-07-29 17:20:00
是...我的确没学好=="
作者: CoNsTaR ((const *))   2016-07-29 17:21:00
不是讲你XD 是某楼看不懂又爱嘘
作者: Caesar08 (Caesar)   2016-07-29 18:02:00
为什么你不先查C++ Operator Precedence?
作者: Ommm5566 (56天團)   2016-07-29 18:45:00
哈哈 看得懂很高竿? 据我所知现代主流好像是程式码要让别人看得懂 你一眼就看懂不代表之后维护的人可以一眼看懂 结果不是要想一下 就是动手整理很抱歉我第一眼看的结果是 {9, 3 ,10}讲错 3,6,10 你看吧 不直觉i++ 打开来看 其实是做了temp = i; 用 temp计算然后temp = temp+1 最后才i=temp所以先assign 3 然后ptr后移一格因此拿到 6 10 和一个未知物
作者: wtchen (没有存在感的人)   2016-07-29 19:09:00
Ommm5566请注意语气
作者: Sidney0503 (Sidney0503)   2016-07-29 19:09:00
据我所知 t=i;i=i+1;return t;没有t+=1 这样太慢啦XD某O好像在某job板被警告语气 年轻人太冲动囉
作者: CoNsTaR ((const *))   2016-07-29 19:25:00
不是说写得复杂比较好 只是你该要求自己复杂的 code 也要能看得懂而不是要求到你手上的 code 都符合你“简洁易懂”的预期啊看到别人在精进学习看懂这些语法 不知道有什么好嘘的会写简洁易懂的 code 就可以嘘想上进的人?
作者: Ommm5566 (56天團)   2016-07-29 19:29:00
对不起 我发言不当 在这边作诚挚的道歉请原PO砍除我的不当推文

Links booklink

Contact Us: admin [ a t ] ucptt.com