gpt4 book ai didi

c - 为什么指针赋值在赋值看起来合适时显示左值错误?

转载 作者:行者123 更新时间:2023-12-04 06:06:20 25 4
gpt4 key购买 nike

我得到一段代码,我们必须猜测其输出。

我的输出: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 这里 u 将迭代到下一个位置,将 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。

In C, pre-increment results in an rvalue expression ,您不能分配给它或递增它。

这不是逻辑问题;这是一个语言问题。您应该将该复杂的公式拆分为多个代码语句。

仅此而已。

(虽然在 C++ 中它是一个左值,但您可以同时做这两件事。)

关于c - 为什么指针赋值在赋值看起来合适时显示左值错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55690946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com