這是我在這裏的第一個問題。 我目前正試圖瞭解這段代碼如何工作。 我基本上想要將一個特定的值分配給類型爲uint8_t
的名爲「hv」的數組。 我不太明白這個演員是如何運作的。這個演員分配了什麼? C風格鑄造
for (i = 0; i < 4; i++) {
hv[i] = *(uint16_t *)(h1 + 8 + i * 2);
}
我明白,它試圖將第二部分轉換爲uint16_t指針,但我不知道第一個星號是幹什麼的。 幫助將不勝感激。
這是我在這裏的第一個問題。 我目前正試圖瞭解這段代碼如何工作。 我基本上想要將一個特定的值分配給類型爲uint8_t
的名爲「hv」的數組。 我不太明白這個演員是如何運作的。這個演員分配了什麼? C風格鑄造
for (i = 0; i < 4; i++) {
hv[i] = *(uint16_t *)(h1 + 8 + i * 2);
}
我明白,它試圖將第二部分轉換爲uint16_t指針,但我不知道第一個星號是幹什麼的。 幫助將不勝感激。
我假設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;
}
耶是有道理的,h1是uint_8 tho類型的數組。 Sry忘了提及 – ConIsoInc
它取消引用指針。 – tkausl
哦,是的,現在它是有道理的,謝謝! – ConIsoInc
請不要煽動暴力在這個網站上!請選擇您的語言:C或C++。 – bolov