左值作为一元'&'操作数

Ind*_*pta 17 c pointers

我有以下几行代码:

#define PORT 9987
Run Code Online (Sandbox Code Playgroud)

char *ptr = (char *)&PORT;
Run Code Online (Sandbox Code Playgroud)

这似乎适用于我的服务器代码.但是当我在我的客户端代码中编写它时,它会给出以下错误消息:

lvalue required as unary ‘&’ operand
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Laz*_*abs 31

C预处理器在这里发挥作用.在对代码进行预处理之后,这就是它的样子.

char *ptr = (char *)&9987;
Run Code Online (Sandbox Code Playgroud)

(&)运算符的地址可以应用于变量而不是文字.


小智 6

预处理器宏没有内存,在编译时宏被替换为值.所以这里char *ptr = (char *)&9987真正发生的事情是,这是不可能的.

  • @IndradhanushGupta`9987`不是左值 - [在这里阅读](http://tigcc.ticalc.org/doc/opers.html#ref) (2认同)