假设您已经传递了指向数组中某个kth
元素的指针,并且您希望搜索该数组。如何使该指针指向数组的开头?这是我的意思的伪代码:
main(){
int arr[5]{1,2,3,4,5};
subRoutine(arr+2); //
}
void subRourtine(int * ptr){
while(ptr){
++ptr; //This only work if i'm looking for an element that is after ptr
}
}
答案 0 :(得分:3)
指针支持常规算术,因此如果您知道所涉及的k
的值,则可以减去该值以返回到数组的开头。
如果您不知道k
的值,如果您知道知道数组开头的唯一值,您可能会过去。
如果你不知道其中任何一个,那你就好运了。 C ++没有提供一种方法来查找数组的开头,只给出指向该数组中某个任意点的指针。
顺便说一句,请注意您使用while (ptr)
提供的代码并不能真正用于遍历到数组的末尾。它试图继续前进,直到递增该点给出一个空指针,这可能永远不会发生 - 即使它确实如此,指针仍然很可能首先远远超过数组的末尾。
鉴于你描述的情况,我会考虑(如果可能的话)传递数组本身而不是指针:
template <class T, size_t N>
void subRoutine(T (&array)[N]) {
for (int i=0; i<N; i++)
process(array[i]);
}
你会调用类似这样的东西:subRoutine(arr);
编译器会为你推导arr
的大小,所以你不需要传递额外的参数来指定大小。