左值需要作为一元操作符 '&' 的操作数。

21

我有以下代码行:

#define PORT 9987

并且

char *ptr = (char *)&PORT;

这段代码在我的服务器端看起来运行正常。但是当我在我的客户端代码中写入它时,它会输出以下错误信息:

lvalue required as unary ‘&’ operand

我做错了什么?


8
这意味着您无法获取数字的地址。 - chris
1
我非常确定它在你的服务器代码中也无法工作 - 那里一定有些不同。 - Carl Norum
3
字符串字面值是左值,整数字面值不是。但在这种情况下,两者都是错误的。 - Carl Norum
2
它在任何地方都不起作用。它是错误的。你错了。 - user207421
4
引号使其成为字符串文字--因此您正在分配静态字符串并获得该地址。 - Chris Dodd
显示剩余8条评论
2个回答

41

这里使用了C预处理器。代码经过预处理后,看起来是这样的。

char *ptr = (char *)&9987;

(&) 操作符的地址可以应用于变量,而不是字面值。


8
预处理器宏没有记忆能力,编译时会将宏替换为其值。因此,实际上发生的事情是 char *ptr = (char *)&9987; ,这是不可能的。

1
我认为这可能不是一个 #define。 - akhil
2
@IndradhanushGupta 9987 不是左值 - 在这里阅读 - Grijesh Chauhan
是的,常量不是左值。但对于 & 操作,需要左值。 - akhil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接