C++ 在c++;

C++ 在c++;,c++,pointers,C++,Pointers,我正在阅读c++中的一段遗留代码,它定义了一个数组,然后分配给一个变量(见下文)。虽然我过去使用过指针和引用,但我不确定这个表达式的含义。问题: 1.这个表达的意思是什么? 2.当(WORD*)中已有另一个指针时,为什么需要外部指针? 提前谢谢 BYTE txbuf[16]; ... WORD crc = *((WORD*)(&txbuf[2])); &txbuf[2]:获取txbuf中第三项的地址 (WORD*)(&txbuf[2]):C风格将&txbuf[2]的结果强制转换为W

我正在阅读c++中的一段遗留代码,它定义了一个数组,然后分配给一个变量(见下文)。虽然我过去使用过指针和引用,但我不确定这个表达式的含义。问题:
1.这个表达的意思是什么?
2.当(WORD*)中已有另一个指针时,为什么需要外部指针?
提前谢谢

BYTE txbuf[16]; 
...
WORD crc = *((WORD*)(&txbuf[2]));
  • &txbuf[2]
    :获取
    txbuf
    中第三项的地址

  • (WORD*)(&txbuf[2])
    :C风格将
    &txbuf[2]
    的结果强制转换为
    WORD*

  • *(/*…*/)
    :取消对整个内容的引用,生成一个
    单词&

问题2首先:
没有“外部指针”-内部
*
是强制转换为指针类型的一部分,外部
*
正在取消对结果指针的引用

问题1:
将其分解为多个部分,其含义与此相同:

BYTE txbuf[16]; 
...
BYTE* byte_pointer = &txbuf[2];
WORD* word_pointer = (WORD*) byte_pointer;
WORD crc = *word_pointer;

您在1中具体询问了什么?另一种选择是
*((WORD*)(txbuf+2))
,但出于某种原因,使用数组索引(
[]
)然后获取其地址的习惯用法很常见。展开数组索引您真正拥有的
&*(txbuf+2)
,即“转到第三个元素,取消对它的引用,然后获取它的地址…”(2)和(3)是将两个连续的1字节数(
字节
)转换为一个2字节数(
,或任何大小)还值得指出的是,表达式具有未定义的行为。实际上,无法保证静态声明的
字节数组(假定为
(未)签名字符
)将与
单词
(假定为
(u)int16_t
)兼容。将声明为
单词
的内容强制转换为
字节
,但不保证再次转换。