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

swe*_*tha 3 c

#include <stdio.h> 

int main()
{
    char *q;
    char *p = "sweta";
    q = ++p++;
    printf("%s", q);
}
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*rav 6

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

后增量运算符的优先级高于预增量运算符

所以q= ++p++被解释为q = ++(p++).现在,后增量运算符返回一个rvalue表达式,而preincrement运算符则要求其操作数为lvalue.

ISO C99 (Section 6.5.3.1/1)

Constraints

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

  • 这个问题已被标记为C. (7认同)