后增量运算符和预减量运算符到c中的同一变量

时间:2012-07-09 05:38:44

标签: c

  

可能重复:
  Why ++*p++ works while ++i++ does not?

这可能在c中吗?如果不是,那是什么原因?

int main()
{
  char *p="hai friends";
   while(*p!='\0')
   {
      ++*p++;
      printf("%c\n",*p);
   }
}

1 个答案:

答案 0 :(得分:3)

这个特例

char *p="hai friends";
while(*p!='\0')
{
    ++*p++;
    printf("%c\n",*p);
}

尝试修改字符串文字,因此是未定义的行为。但一般来说,对于指针,你可以做

++*p++;

因为后增量和预增量指的是不同的实体。后增量递增指针,而预增量递增指向的值。

在同一实体上使用前后递减会再次导致未定义的行为,因为这会在不插入序列点的情况下修改变量两次。