[英]What is (uint32_t*)?
我是C新手,不明白下面代码最后两行怎么解决,能解释一下吗? 非常感谢您。
pBuffcmd = (uint32_t*)&CmdBuffer[CmdBuffer_Index]; *pBuffcmd = cmd;
#DL_SIZE (8*1024L)
#define CMD_FIFO_SIZE (4*1024L)
#define CMD_SIZE (4)/
uint32_t CmdBuffer_Index;
volatile uint32_t DlBuffer_Index;
uint8_t DlBuffer[DL_SIZE];
uint8_t CmdBuffer[CMD_FIFO_SIZE];
void App_WrCoCmd_Buffer(Gpu_Hal_Context_t *phost,uint32_t cmd)
{
#ifdef BUFFER_OPTIMIZATION
uint32_t *pBuffcmd;
if (CmdBuffer_Index >= CMD_FIFO_SIZE)
{
if (CmdBuffer_Index > 0) {
NOP;
}
CmdBuffer_Index = 0;
}
pBuffcmd = (uint32_t*)&CmdBuffer[CmdBuffer_Index];
*pBuffcmd = cmd;
(uint32_t*)
是一个演员表。 强制转换是执行转换的运算符。
在这段代码中, &CmdBuffer[CmdBuffer_Index]
是指向CmdBuffer
特定元素的指针,该指针的类型是“指向uint8_t
”,也写作uint8_t *
。 此转换将其转换为指向uint32_t
的指针,也写作uint32_t *
。
然后*pBuffcmd = cmd;
尝试将值cmd
写入转换后的指针指向的uint32_t
。
这是糟糕的代码。 C 标准不保证将uint8_t *
转换为uint32_t *
会起作用。 即使这样做有效,C 标准也不能保证使用uint32_t
引用写入使用元素类型uint8_t
定义的数组中的字节会起作用。 这段代码可能是为特定的 C 实现而设计的,它可以在其中工作,但可以使用标准 C 代码获得所需的结果:
memcpy(&CmdBuffer[CmdBuffer_Index], &cmd, sizeof cmd);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.