簡體   English   中英

什么是 (uint32_t*)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM