++i与*++i?

CNNOY 2012-12-27 08:55:07
int i=1;
++i;
这个表达式,有一个序列点。有2个值。
1.计算结果:i=i+1=2
2.副作用:i=i+1=2
______________
int i=1;
*++i;
这个表达式,也有一个序列点。它有多少个值?
...全文
588 36 打赏 收藏 转发到动态 举报
写回复
用AI写文章
36 条回复
切换为时间正序
请发表友善的回复…
发表回复
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
++i; i++; 我不是说了么! 问的是: *++i; 你还不知道,别人问什么呢?
zhcosin 2012-12-28
  • 打赏
  • 举报
回复
为了避免说我总回狗屎帖,还是说一下吧,但这不代表我故意在踩狗屎: 当 ++i 与 i++ 出现在一个表达式中时,唯一的区别就是这个自增操作是先于表达式引用它的值呢还是后于表达式引用它的值,对前者来说,是 i 先自增1,然后再参与表达式中的运算,对于后者来说,是先参与表达式的运算,完了再自增1,就这么个情况,哪用得着翻来覆来去踩。 所以,*++i 等价于 *(++i),不知道这样说你清楚了没。
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
rocktyt2: 傻帽,你以为你是老板啊?!
赵4老师 2012-12-28
  • 打赏
  • 举报
回复
VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 提醒: “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 (Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)” 不是一回事! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
问题: p是个地址,自增后,就是下一个地址了。 怎么还可以间接访问*p呢? 这里的访问p 就是 +1之后的p 什么疑问?
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 29 楼 CNNOY 的回复:
更改: int j=1,*i; i=&j; *++i;
越界访问 UB
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
6楼,谁说说?
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
更改: int j=1,*i; i=&j; *++i;
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
rocktyt2: 程序,计算机理解就可以了!
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 26 楼 CNNOY 的回复:
为什么这么多屎贴啊? 好像还没个答案!
汗 答案我说了2次 不是吗? 怎么没有答案了 int arr[]={9, 3}; int* p=arr; *++p; 就是 p指向arr[1] 表达式的值是 arr[1]即3 至于你写的那句 int i=1; *++i; 直接语法错误 非指针不能用*操作符
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
为什么这么多屎贴啊? 好像还没个答案!
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 23 楼 zhcosin 的回复:
唉,习惯踩狗屎并研究狗屎成色的大有人在呀,这不又是一个?
这个只是 c语言的基础 你这只是逃避自己知识盲点 而不是试图查缺补漏
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 22 楼 rocktyt2 的回复:
引用 21 楼 lin5161678 的回复:引用 19 楼 rocktyt2 的回复:引用 9 楼 CNNOY 的回复:8楼: 事实上,除了你写代码之外。可能还看别人的代码! 你怎么知道别人会写出些什么样的代码呢?这种时候有2件事情要做 1是跟领导说明情况让那个人滚蛋 2是在那个人的环境上调试,根据实际运行结果把代码改成正常人思维能理解的代码 汗 ……
因为是初学者 和 总是逃避问题从来不试图解决问题 另外 你不知道这里的学生大本营吗 问 i=i++ 的人都有
zhcosin 2012-12-28
  • 打赏
  • 举报
回复
唉,习惯踩狗屎并研究狗屎成色的大有人在呀,这不又是一个?
rocktyt 2012-12-28
  • 打赏
  • 举报
回复
引用 21 楼 lin5161678 的回复:
引用 19 楼 rocktyt2 的回复:引用 9 楼 CNNOY 的回复:8楼: 事实上,除了你写代码之外。可能还看别人的代码! 你怎么知道别人会写出些什么样的代码呢?这种时候有2件事情要做 1是跟领导说明情况让那个人滚蛋 2是在那个人的环境上调试,根据实际运行结果把代码改成正常人思维能理解的代码 汗 才 *++i;而已 大惊小怪 怎么就正常人理解……
如果正常人能理解,为什么会有这么多人问?别的问题问的人就没有这么多
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 19 楼 rocktyt2 的回复:
引用 9 楼 CNNOY 的回复:8楼: 事实上,除了你写代码之外。可能还看别人的代码! 你怎么知道别人会写出些什么样的代码呢?这种时候有2件事情要做 1是跟领导说明情况让那个人滚蛋 2是在那个人的环境上调试,根据实际运行结果把代码改成正常人思维能理解的代码
汗 才 *++i;而已 大惊小怪 怎么就正常人理解不了 表达式没掌握好
小默 2012-12-28
  • 打赏
  • 举报
回复
引用 9 楼 CNNOY 的回复:
事实上,除了你写代码之外。可能还看别人的代码! 你怎么知道别人会写出些什么样的代码呢?
如果你拿到这样的源码,请果断修改它,免得遗祸后人,并且记住永远不要写出那种代码。 如果是在书上等地方看到的话,那就开个 Test project 断点跟踪测试了解一下就好。
rocktyt 2012-12-28
  • 打赏
  • 举报
回复
引用 9 楼 CNNOY 的回复:
8楼: 事实上,除了你写代码之外。可能还看别人的代码! 你怎么知道别人会写出些什么样的代码呢?
这种时候有2件事情要做 1是跟领导说明情况让那个人滚蛋 2是在那个人的环境上调试,根据实际运行结果把代码改成正常人思维能理解的代码
lin5161678 2012-12-28
  • 打赏
  • 举报
回复
引用 14 楼 CNNOY 的回复:
10楼: *++i; 相当于: ++i,*i; (1)i的地址是:i=i+1。 (2)间接访问地址i。 还是,地址i+1的内容啊? (3)i的副作用是:i=i+1。
*运算符的结合的是 ++i 这个表达式 ++i这个表达式的值是 i+1 你看不懂之前的拆分 那就这样拆 i=i+1; *i;
CNNOY 2012-12-28
  • 打赏
  • 举报
回复
colinfang2006: 还有些贴没结,帮忙看看? 你懂的?!
加载更多回复(16)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧