-1

可能重复:
为什么 ++*p++ 有效而 ++i++ 无效?

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

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

1 回答 1

3

这个特殊的例子

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

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

++*p++;

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

在同一个实体上使用前减和后减将再次导致未定义的行为,因为这将修改变量两次而不会干预序列点。

于 2012-07-09T05:43:54.567 回答