这是我在这里的第一个问题。 我目前正试图了解这段代码如何工作。 我基本上想要将一个特定的值分配给类型为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