Char表的表格用指针缩短

时间:2017-06-27 16:49:40

标签: c++ arrays pointers

我是C ++开发的新手,在学习的过程中我遇到了以下过程:

sws_scale(swsCtx, pictYUV->data, pictYUV->linesize, 0, pictYUV->height,
  pictNewYUV->data, pictNewYUV->linesize);

有人可以解释为什么输出是这样的吗?它是一种将A [2]转换为短指针吗?

1 个答案:

答案 0 :(得分:1)

它的作用:

A衰减到char*到数组的第一个元素。该指针转换为short*。执行指针算术,将其移动两个短路的空间,然后将其解除引用。当它被解释为short时,它指向的内存读取为1541(00000101 00000110)。

为什么不这样做:

  1. 这是未定义的行为。严格别名禁止将一种类型的指针转​​换为另一种任意类型并访问该对象。有些情况是合法的,但这不是其中之一。见注释。

  2. 无法保证sizeof(short) == 2。如果sizeof(short) == 4,该行将读取超过数组末尾的内容。

  3. 您获得的价值取决于字节顺序。

  4. 从技术上讲,short值可能最终成为陷阱表示,但实际上我非常怀疑任何地方都存在任何积分陷阱值。

  5. 注意:Stack Overflow上有大量支持/接受的答案包含与*(short*)A类似的行,但仍然违反了严格的别名。