这个演员分配了什么? C风格铸造

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

}

以上是 这个演员分配了什么? C风格铸造 的全部内容, 来源链接: utcz.com/qa/257422.html

回到顶部