#include <stdio.h>
int main()
{
char *q;
char *p = "sweta";
q = ++p++;
printf("%s", q);
}
该程序的输出是什么有效,因为它给出了所需的l值错误。
答案 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