指针算术和可移植性

mor*_*ndg 2 c++ embedded pointers pointer-arithmetic

我正在写一个应用程序,我不得不做一些指针算术.但是这个应用程序将在不同的架构上运行!我不确定这是否会有问题,但在阅读本文之后,我认为我必须改变它.

这是我原来的代码,我不太喜欢:

class Frame{
  /* ... */
protected:
  const u_char* const m_pLayerHeader; // Where header of this layer starts
  int m_iHeaderLength;                // Length of the header of this layer
  int m_iFrameLength;                 // Header + payloads length
};

/**
 * Get the pointer to the payload of the current layer
 * @return A pointer to the payload of the current layer
 */
const u_char* Frame::getPayload() const
{
  // FIXME : Pointer arithmetic, portability!
  return m_pLayerHeader + m_iHeaderLength;
}
Run Code Online (Sandbox Code Playgroud)

很糟糕不是吗!向指针添加intu_char!但后来我改为:

const u_char* Frame::getPayload() const
{
  return &m_pLayerHeader[m_iHeaderLength];
}
Run Code Online (Sandbox Code Playgroud)

我想现在,编译器可以说多少跳!对?[]数组上的操作是否被视为指针算术?它是否解决了可移植性问题?

Rei*_*ica 10

p + i并且&p[i]p指针和i整数类型值的同义词.甚至你甚至可以写&i[p]它并且它仍然有效(就像你可以写的那样i + p).

您链接的示例中的可移植性问题来自sizeof(int)不同平台.您的代码很好,假设您要跳过m_iHeaderLengthu_chars 数.