我去年做的一个项目涉及指针算法。当我这样做时,我能够处理像内存地址这样的指针,并根据需要添加或减去它们。例如,如果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。
这什么时候改变了?任何人都可以给我一些洞察我错的地方,这样如果我问这个问题我就不会觉得愚蠢吗?
编辑:好的 - 似乎总是这样。我的坏。
答案 0 :(得分:0)
指针的类型仅用于此目的。 "指向int"意味着添加一个将跳过4个字节(如果int是该机器上的4个字节。
更新:(当然,除了解释它所指向的数据类型之外)。