指针问题

dsoyy 2008-09-23 11:27:08
看到一个小东西: ++ *p ++
它的执行顺序是什么样的啊:
先 *p,再前缀 ++,最后后缀 ++
还是
先 *p,再后缀 ++,最后前缀 ++
我觉得是第一种,但是有点想不通,请大家帮帮分析一下。
...全文
211 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsoyy 2008-09-23
  • 打赏
  • 举报
回复
抱歉1楼,评分时候本来 P = 一楼,执行了++P,。。。。。。。。。
zgjxwl 2008-09-23
  • 打赏
  • 举报
回复
单目运算符的结合性是从右到左的
即相当于++(*(p++))

p是个指针,指针p++,由于是后缀加,返回的指针仍然是原来的指针p
*(p++)就是取指针p一开始定义时存入的值,其实也就是指针当前所指的前一个位置的值,然后对这个值进行前缀加

就相当于++(*p)
dsoyy 2008-09-23
  • 打赏
  • 举报
回复
懂了,可以结贴了,这个论坛非常有效率!赞!
lizhaochai 2008-09-23
  • 打赏
  • 举报
回复
++(*(p++))其中p++的返回值是p原来的指针,然后指针再下移。
那(*(p++))的值取的是p下移前所指的数值,那第一个++就加这个数据值了
zgjxwl 2008-09-23
  • 打赏
  • 举报
回复
能提高程序员的工作效率,哈哈.
zgjxwl 2008-09-23
  • 打赏
  • 举报
回复
不出问题就好,因为这是给编译器看的,加不加括号无所谓的

但是,当出问题需要维护时,就要给程序员看了,这时还是加上的好,可读性好点,能提高效率

所以,还是加上的好,因为你无法保证它一定不会不出bug
dsoyy 2008-09-23
  • 打赏
  • 举报
回复
请教一楼,最外面的++如何解释啊?
这是我看<C和指针>上的例子,讲解不多:似乎是数值自加发生指针移位之前。
skyering 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lbh2001 的回复:]
去看优先级表
但最好不要这样写,看着就迷糊
多写几个括号又不影响运行效率,可读性又高,何乐而不为
[/Quote]
及其同意三楼的说法,其实运算符优先级是没有用的,你现在背上了以后还是忘,记得加括号就行了。
h13826013646 2008-09-23
  • 打赏
  • 举报
回复
++是属于单目运算符来的,他的运算规则是自右向左,所以应该是++(*(p++)),题目:*P,再 ++(*p),再p++,Y/N? 答案是N
aozhi 2008-09-23
  • 打赏
  • 举报
回复
上机调一下呗.
dsoyy 2008-09-23
  • 打赏
  • 举报
回复
补充一下我的理解:由优先级可知,后缀++优先级最高,所所以先获取*P的数值,之后就迷糊了。
++ *p ++ 等价于++ (*p ++)还是(++ *p) ++ 或是其他呢?

题目本意应该是:*P,再 ++(*p),再p++,Y/N?
lbh2001 2008-09-23
  • 打赏
  • 举报
回复
去看优先级表
但最好不要这样写,看着就迷糊
多写几个括号又不影响运行效率,可读性又高,何乐而不为
lsldd 2008-09-23
  • 打赏
  • 举报
回复
Up LS
mifeixq 2008-09-23
  • 打赏
  • 举报
回复
++(*(p++))
右结合的!
lsldd 2008-09-23
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 dsoyy 的回复:]
抱歉1楼,评分时候本来 P = 一楼,执行了++P,。。。。。。。。。
[/Quote]
..................

70,037

社区成员

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

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