使用指针修改数组元素

时间:2019-04-30 09:55:06

标签: c++

我正在研究一个仅使用指针修改数组数据的程序。我正在尝试返回array [ix] == 0的索引。但是,我一直陷于无限循环中。我在做什么错了?

int firstprime(int size, int arr[]){
  int* end = arr + size;
  int* begin = arr;
    while(begin<end){
        if(*begin==0)
            return *begin;
        begin++;
    }
    return -1;
}

2 个答案:

答案 0 :(得分:2)

您可以很容易地使用std::distance来获取索引。 有关std::distance here

的更多信息

顺便说一句,函数名称也很容易让人误解。如果该函数旨在返回数组中某个值的索引,请考虑更改该函数名称,例如getIndex()find()。只是选择一些更有意义的东西。

#include <iostream>

int firstprime(int size, int *arr)
{
    int *begin = arr;
    int *end = begin + size;
    while( begin < end )
    {
        if(*begin==0)
            return std::distance(arr, begin);
        begin++;
    }
    return -1;
}

int main()
{
    int array[10] = {1,2,3,4,0,6,7,8,9,10};
    int p = firstprime(10, array);
    std::cout<< "0 found at index: " << p <<std::endl;
}

结果是:

0 found at index: 4

在线示例:https://rextester.com/KVCL75042

答案 1 :(得分:1)

要获取两个指针之间的“距离”(以元素数为单位),可以使用std::distance

return std::distance(arr, begin);  // Return the distance between current element and the beginning of the array

您还可以减去指针:

return begin - arr;  // Return the distance between the current element and the beginning of the array

以上两个语句返回的“距离”将以元素数为单位,并且由于您与第一个元素之间的距离是“当前”元素的索引。