我得到了一段我们不得不猜测其输出的代码。
我的输出:60
#include <stdio.h>
int main()
{
int d[] = {20,30,40,50,60};
int *u,k;
u = d;
k = *((++u)++);
k += k;
(++u) += k;
printf("%d",*(++u));
return 0;
}
预期:
k = *((++u)++)
等于30,因为它将迭代一次(++ u),然后将被迭代但未分配。所以我们在d [1]。
(++u) += k
在这里,您将迭代到下一个位置,向其添加k,然后将结果分配给u的下一个元素。
实际结果:
main.c: In function ‘main’:
main.c:16:16: error: lvalue required as increment operand
k = *((++u)++);
^
main.c:18:11: error: lvalue required as left operand of assignment
(++u) += k;
这使我在指针的概念上更加困惑。请帮忙。
答案 0 :(得分:8)
正如编译器告诉您的那样,该程序不是有效的C。
In C, pre-increment results in an rvalue expression,您不能分配给它或增加它。
这不是逻辑上的问题;这是语言问题。您应该将该复杂公式拆分为多个代码语句。
仅此而已。
(在C ++中,它是一个 lvalue ,您可以同时做这两个事情。)
答案 1 :(得分:6)
在C中,++a
不是 l值。
非正式地,这意味着您不能将其放在作业的左侧。
这也意味着您无法增加它。
所以(++a)++
是无效代码。
(请注意,它是有效的C ++)。