首页 > 解决方案 > 为什么当分配看起来合适时指针分配显示左值错误?

问题描述

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

我的输出: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;

这让我对指针的概念更加困惑。请帮忙。

标签: cpointerslvalue

解决方案


正如编译器告诉你的那样,该程序不是有效的 C。

在 C 中,预增量会产生一个右值表达式,您可能不会对其进行赋值或增量。

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

这里的所有都是它的。

(在 C++ 中,它是一个左值,你可以做这两件事。)


推荐阅读