使指针指向数组c ++

时间:2015-12-09 00:16:08

标签: c++

假设您已经传递了指向数组中某个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
    }
}

1 个答案:

答案 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的大小,所以你不需要传递额外的参数来指定大小。