我有一个函数接收两个指针,即数组的第一个成员和最后一个指针,我不能使用for循环,do和do while。如何获得指向数组中间成员的指针?我是初学者。
答案 0 :(得分:2)
使用指针算术以元素数量计算指针之间的距离,然后除以2。然后加到start
。
void foo(const int *start, const int *end)
{
assert(start != end); // avoid returning invalid pointer if list is empty
const int *middle = start + (end - start)/2;
...
}
根据您要使用的算法,可能会出现一次性错误和调整(例如:左或右等分,如果列表仅包含一个元素,则可能要选择中间作为第一个元素(上面的代码会),但是您可能需要添加1来选择超出元素的位置),但这是一般的想法,没有循环,O(1)
复杂度。