这可能在c中吗?如果不是,那是什么原因?
int main()
{
char *p="hai friends";
while(*p!='\0')
{
++*p++;
printf("%c\n",*p);
}
}
答案 0 :(得分:3)
这个特例
char *p="hai friends";
while(*p!='\0')
{
++*p++;
printf("%c\n",*p);
}
尝试修改字符串文字,因此是未定义的行为。但一般来说,对于指针,你可以做
++*p++;
因为后增量和预增量指的是不同的实体。后增量递增指针,而预增量递增指向的值。
在同一实体上使用前后递减会再次导致未定义的行为,因为这会在不插入序列点的情况下修改变量两次。