可以在c中的变量上同时使用前缀和后缀

时间:2010-08-12 02:24:40

标签: c

#include <stdio.h> 

int main()
{
    char *q;
    char *p = "sweta";
    q = ++p++;
    printf("%s", q);
}

该程序的输出是什么有效,因为它给出了所需的l值错误。

4 个答案:

答案 0 :(得分:6)

q = ++p++;这甚至不会在C或C ++中编译

后增量运算符比预增量运算符

precedence

因此q= ++p++被解释为q = ++(p++)。现在,post increment运算符返回rvalue表达式,而preincrement运算符则要求其操作数为lvalue

ISO C99 (Section 6.5.3.1/1)

Constraints

  

pre fi x递增或递减运算符的操作数应具有合格或不合格的实数或指针类型,并且应为可修改的左值

答案 1 :(得分:3)

由于无法增加临时对象,因此无法完成此操作。

答案 2 :(得分:1)

您不能在变量上多次使用前缀/后缀运算符。这是因为操作员返回原始变量的副本,因此在副本上使用其他运算符不会更改原始变量。 C / C ++不允许这样做以防止混淆。

如果要在将新值复制到q时将变量增加2,则可以使用q=(p+=2);代替q=++p++;

答案 3 :(得分:1)

不要试着太聪明,把语言推到不应该去的地方。 有一天它会咬你。或者咬你的顾客,他们会咬你。

只是理智并以这种方式编码:

#include <stdio.h> 

int main()
{
    char* q;
    char* p = "sweta";
    q = p++;
    q = ++p;
    printf("%s\n", q);
}

给了我这个:

eta