假设您已将指针传递给数组中的某个 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
}
}
最佳答案
指针支持普通算术,所以如果您知道所涉及的 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
的大小,所以你不需要传递一个用于指定大小的额外参数。
关于c++ - 使指针指向数组c++的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168582/