回 帖 发 新 帖 刷新版面

主题:[讨论]运算符优先级问题

在看一些字符串问题的时候,经常出现这样的语句, *tmp++ = *p;比如tmp和p是指向数组元素的指针,那么这个语句的执行顺序是怎样的呢?正确的理解是*tmp,将*p赋给*tmp后tmp++。但是我不是很理解,*和++优先级是一样的。那么在=左边是从左到右执行,先*tmp后tmp++,那么*p是赋给++后还是++前呢??

回复列表 (共2个回复)

沙发

楼主,您应该好好了解下,优先级,结合方向,执行顺序。这写都是不同的。
  ++ *虽然优先级一样,但它是右结合的。故*temp++  等价于*(temp++),而不是(*temp)++  。优先级是相对于不同类型运算符而言,结合方向是相对于同一优先级的不同或相同运算符而言。但执行顺序和上面两者无明显关系。*temp++   = *p是无法确定先计算等号左边还是右边,甚至同时计算。c标准是没有严格规定,也完全没必要规定,会影响代码执行效率。把这个问题完全解释清楚,也不是三言两语能讲明白,如果您还有什么疑问,再提出来。

板凳


楼主可以这样去看。
因为在这个语句里面,*和++是同一优先级别,*tmp++=*p 等价于 *(tmp++)=*p加上括号,显得更有条理了。
p是一个指针变量,指向某一数据的地址。加上*就意味着p要取这个地址里面的内容。
tmp和p是同一种性质,也是指针变量。只不过p取到内容后复制给tmp所指向的地址空间。赋值后,*tmp即取“++”前的tmp中的内容。

我来回复

您尚未登录,请登录后再回复。点此登录或注册