C ++指针算术逻辑

时间:2014-07-28 18:20:19

标签: c++ pointers pointer-arithmetic

我去年做的一个项目涉及指针算法。当我这样做时,我能够处理像内存地址这样的指针,并根据需要添加或减去它们。例如,如果int * p == array [0],那么你就知道p + sizeof(int)会找到array [1]。这似乎不再是这种情况,因为我面前有一个比较着名的面试问题,我必须调试以下代码:

void 
ReverseTheArray( const short *pArrayStart, int nArrayByteLength )
{
short const *pArrayEnd = (pArrayStart + nArrayByteLength);

while(pArrayStart != pArrayEnd)
{
    short tmp = *pArrayStart;
    *pArrayStart = *pArrayEnd;
    *pArrayEnd = tmp;

    pArrayStart++;
    pArrayEnd--;
}
}

请注意最后两行 - 我敢打赌,这些都是错误的,因为只需在指针上添加1就行不通,你需要添加sizeof(短)。但是从测试代码看起来我错了 - " pArrayStart ++"将sizeof(short)添加到指针,而不是1。

这什么时候改变了?任何人都可以给我一些洞察我错的地方,这样如果我问这个问题我就不会觉得愚蠢吗?

编辑:好的 - 似乎总是这样。我的坏。

1 个答案:

答案 0 :(得分:0)

指针的类型仅用于此目的。 "指向int"意味着添加一个将跳过4个字节(如果int是该机器上的4个字节。

更新:(当然,除了解释它所指向的数据类型之外)。