c++ - 使指针指向数组c++的开头

标签 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
    }
}

最佳答案

指针支持普通算术,所以如果您知道所涉及的 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/

相关文章:

C++11 非拥有引用/指向 unique_ptr 的指针?

c++ - 字符串文字到 basic_string<unsigned char>

c++ - 使用聚合初始化器初始化类的模板(聚合类型)成员但没有额外的括号

c++ - 如何创建对对象的常量引用?

c++ - 在 map C++ 中迭代和使用 find()

c++ - 分支覆盖率低,尤其是在使用第 3 方库时。前 boost

c++ - 检查 CppUnit 中的 printf 输出

python - 如何将 Python 双端队列转换为 C++ 容器?

c++ - 无法在 MacOS Mojave 上链接 C++11 的库

c++ - 字符串赋值错误