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

时间:2017-12-02 17:04:24

标签: c++ c casting

这是我在这里的第一个问题。 我目前正在尝试了解此代码的工作原理。 我基本上想要为类型为uint8_t的名为“hv”的数组赋予特定值。 我不太明白这个演员是做什么的/它是如何运作的。

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

我知道它试图将第二部分转换为uint16_t指针,但我不知道第一个星号是做什么的。 非常感谢帮助。

1 个答案:

答案 0 :(得分: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;
}