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");
}
}
}