这是我在这里的第一个问题。
我目前正在尝试了解此代码的工作原理。
我基本上想要为类型为uint8_t
的名为“hv”的数组赋予特定值。
我不太明白这个演员是做什么的/它是如何运作的。
for (i = 0; i < 4; i++) {
hv[i] = *(uint16_t *)(h1 + 8 + i * 2);
}
我知道它试图将第二部分转换为uint16_t指针,但我不知道第一个星号是做什么的。 非常感谢帮助。
答案 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;
}