为什么指针赋值在赋值看起来合适时显示左值错误?
Why Pointer assignment shows lvalue error when assignments look appropriate?
我得到一段代码,我们必须猜测其输出。
我的输出: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;
这让我对指针的概念更加困惑。请帮忙。
在 C 中,++a
不是 左值。
通俗地说,这意味着您不能将它放在作业的左侧。
这也意味着你不能增加它。
所以(++a)++
是无效代码。
(注意它是有效的 C++)。
正如编译器告诉您的那样,该程序不是有效的 C。
In C, pre-increment results in an rvalue expression,您不能分配或递增。
这不是逻辑问题;这是一个语言问题。您应该将该复杂的公式拆分为多个代码语句。
仅此而已。
(在 C++ 中,它是一个 左值 ,你可以同时做这两件事。)
我得到一段代码,我们必须猜测其输出。
我的输出: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;
这让我对指针的概念更加困惑。请帮忙。
在 C 中,++a
不是 左值。
通俗地说,这意味着您不能将它放在作业的左侧。
这也意味着你不能增加它。
所以(++a)++
是无效代码。
(注意它是有效的 C++)。
正如编译器告诉您的那样,该程序不是有效的 C。
In C, pre-increment results in an rvalue expression,您不能分配或递增。
这不是逻辑问题;这是一个语言问题。您应该将该复杂的公式拆分为多个代码语句。
仅此而已。
(在 C++ 中,它是一个 左值 ,你可以同时做这两件事。)