C中变量及函数与左右值的联系

C中函数与左右值的联系

左值和右值

  • 左值:标识的是个存储位置,内存中的位置;左值可以是个变量名,或者是个表达式,但表达式必须表示的是个内存位置

  • 右值:就是个值,变量的值,表达式的值。

函数调用的参数

函数调用的参数: 全是右值,正是说明了函数调用都是传值的。

  • 传递的左值到函数参数时都会全部转变成右值;
  • 传递的值可能是地址值,也可能是普通值。

举例

/* 按键FIFO用到变量 */
typedef struct
{
    uint16_t MsgCode;       /* 消息代码 */
    uint32_t MsgParam;      /* 消息的数据体, 也可以是指针(强制转化) */
}MSG_T;
static void vTaskTaskUserIF(void *pvParameters)
{
    MSG_T   *ptMsg;
    uint8_t ucCount = 0;
    uint8_t ucKeyCode;
    uint8_t pcWriteBuffer[500];

    /* 初始化结构体指针 */
    ptMsg = &g_tMsg;

    /* 初始化数组 */
    ptMsg->ucMessageID = 1;
    ptMsg->ulData[0] = 3;
    ptMsg->usData[0] = 7;

    while(1)
    {
        ucKeyCode = bsp_GetKey();
            if(xQueueSend(xQueue2,                  /* 消息队列句柄 */
                        (void *) &ptMsg,           /* 发送结构体指针变量ptMsg的地址 */
                        (TickType_t)10) != pdPASS )
            {
                /* 发送失败,即使等待了10个时钟节拍 */
                printf("K3键按下,向xQueue2发送数据失败,即使等待了10个时钟节拍\r\n");
            }
        }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值