我正在研究一个仅使用指针修改数组数据的程序。我正在尝试返回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;
}
答案 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
答案 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
以上两个语句返回的“距离”将以元素数为单位,并且由于您与第一个元素之间的距离是“当前”元素的索引。