C 错误:需要左值作为一元“&”操作数

Posted

技术标签:

【中文标题】C 错误:需要左值作为一元“&”操作数【英文标题】:C error: lvalue required as unary '&' operand 【发布时间】:2013-09-10 20:08:50 【问题描述】:

我有一个代码错误,但不确定我的转换和引用有什么问题。

BOOL xMBPortSerialPutByte( CHAR ucByte )

    CDC_Send_DATA(&((unsigned char)ucByte), 1);   // code error here
    xMBPortEventPost(EV_FRAME_SENT);
    return TRUE;

CDC_Send_DATA 定义如下:

uint32_t CDC_Send_DATA (uint8_t *ptrBuffer, uint8_t Send_length);

这是错误信息:

  port/portserial.c:139:19: error: lvalue required as unary '&' operand

希望有人可以提供帮助。谢谢!

【问题讨论】:

【参考方案1】:

强制转换操作导致转换,产生一个右值。右值没有地址,因此您不能使用一元 & 对其进行操作。你需要取地址然后投that

CDC_Send_DATA((unsigned char *)&ucByte, 1);

但最正确的是,您可能应该匹配强制转换中的参数类型:

CDC_Send_DATA((uint8_t *)&ucByte, 1);

检查返回值也可能是个好主意。

【讨论】:

以上是关于C 错误:需要左值作为一元“&”操作数的主要内容,如果未能解决你的问题,请参考以下文章

旧 C 代码中需要左值作为增量操作数错误

左值需要作为 c 中赋值错误的左操作数

左值需要作为赋值的左操作数(递增引用的变量)C++

条件运算符中的“错误:需要左值作为赋值的左操作数”

错误:需要左值作为赋值的左操作数,我收到此错误啥是左值和右值以及如何删除此错误

& 返回左值或右值是啥?