(unsigned char *)& variable_name是什么意思?

时间:2015-04-10 08:45:05

标签: c stm32f4discovery

以下函数调用中的(unsigned char *)& ch是什么意思?

      HAL_UART_Transmit(&UartHandle, (unsigned char *)&ch, 1, 0xFFFF);

      HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, unsigned char *pData, int Size, long Timeout)
     {
       /*...........Function Body ........*/
     }

3 个答案:

答案 0 :(得分:3)

&ch是某个变量的地址,给定此代码,类型未知。 (unsigned int*)&ch只是将此表达式的结果转换为指向int的指针。

答案 1 :(得分:2)

使用address-of运算符ch获取变量&的地址。然后将得到的地址转换(强制转换)为类型unsigned int *,即指向unsigned int的指针。只有

才有意义
  1. ch的类型不是unsigned int
  2. 开头
  3. ch的尺寸至少与unsigned int
  4. 的尺寸一样大
  5. 被调用函数接受unsigned int *参数
  6. 因为我们可以看到参数的类型实际上是uint8_t *,所以这很可能是一个错误。应该删除广告素材(如果ch已经是uint8_t类型,它应该是)或更改为uint8_t *。此外,函数的参数应为const,传递函数不应改变其参数。

答案 2 :(得分:0)

假设您有一个带有unsigned int *类型参数的函数。

您有一个int类型的对象,并且您希望将该函数的指针传递给该对象。

int ch = 42;

然后&chint *对象提供int。您无法将&ch直接传递给您的函数,因为&ch类型为int *,但该函数需要unsigned int *,因此您需要将其转换为unsigned int *

(unsigned int *) &ch