我正在编写一个应用程序,我不得不做一些指针算术。然而,这个应用程序将在不同的架构上运行!我不确定这是否会有问题,但在阅读了这篇文章后,我认为我必须改变它。
这是我不太喜欢的原始代码:
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;
}
很糟糕是不是!向指针添加int
值!u_char
但后来我改成这样:
const u_char* Frame::getPayload() const
{
return &m_pLayerHeader[m_iHeaderLength];
}
我想现在,编译器能说多少就跳转了!对?对数组的操作是否[]
被视为指针算术?它是否解决了便携性问题?