gpt4 book ai didi

c - GCC 2.9 和 "lvalue required as left operand of assignment"

转载 作者:行者123 更新时间:2023-12-03 05:47:19 30 4
gpt4 key购买 nike

我一直在研究 void 指针并创建了这个示例:

#include <stdio.h>

struct intint {
int a;
int b;
};

struct intshortshort {
int a;
short b;
short c;
};

void fill_me(struct intint **pii, void *piss)
{
(void*)*pii = piss; // Question about this line?
}

int main()
{
struct intint *pii = NULL;
struct intshortshort iss;
iss.a = iss.b = iss.c = 13;

fill_me(&pii, &iss);

printf("%d..%d\n", pii->a, pii->b);


return 0;
}

问题:

当我使用 gcc 版本 2.95.4 时,一切都会按预期编译和工作,但 gcc 版本 4.7.3 给出以下错误:

void_pointer.c:16:17: error: lvalue required as left operand of assignment

是否有理由不再允许将 (void *) 添加到左值?

编辑:谢谢您的回答,我想我理解了这个问题,但是“为什么一开始没问题?”这个问题仍然很有趣。

最佳答案

这个问题与 void* 无关,而是关于类型转换和左值。

例如:

#include <stdio.h>

int main()
{
int n;
(int)n = 100;
return 0;
}

此代码将导致相同的错误:需要左值作为赋值的左操作数。

这是因为 = 运算符需要一个可修改的左值作为其左操作数。

那么,什么是左值?什么是可修改左值?请参阅wikipedia:Value .

关于c - GCC 2.9 和 "lvalue required as left operand of assignment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20675646/

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