2017-12-02 152 views
-2

這是我在這裏的第一個問題。 我目前正試圖瞭解這段代碼如何工作。 我基本上想要將一個特定的值分配給類型爲uint8_t的名爲「hv」的數組。 我不太明白這個演員是如何運作的。這個演員分配了什麼? C風格鑄造

for (i = 0; i < 4; i++) { 
    hv[i] = *(uint16_t *)(h1 + 8 + i * 2); 
} 

我明白,它試圖將第二部分轉換爲uint16_t指針,但我不知道第一個星號是幹什麼的。 幫助將不勝感激。

+3

它取消引用指針。 – tkausl

+0

哦,是的,現在它是有道理的,謝謝! – ConIsoInc

+2

請不要煽動暴力在這個網站上!請選擇您的語言:C或C++。 – bolov

回答

0

我假設h1是一個指針。否則這根本就沒有意義。

表達式(h1 + 8 + i * 2)將給出一個新的指針,該指針相對於h1被取消。到目前爲止,取決於sizeof(*h1)。偏移量爲(8+i*2)*sizeof(*h1)字節。

(uint_16_t *)放在它的前面會將其轉換爲uint_16_t指針。在前面加一個星號會給你這個內存位置的內容,視爲uint_16_t。

代碼等同於:

for (i = 0; i < 4; i++) { 
    uint_16_t * tmp = (uint16_t *)(h1 + 8 + i * 2); 
    hv[i] = *tmp; 
} 
+0

耶是有道理的,h1是uint_8 tho類型的數組。 Sry忘了提及 – ConIsoInc