只有一个数组元素被传递给函数。 C ++

时间:2016-09-30 01:24:04

标签: c++ arrays function pointers googletest

出于某种原因,我的函数LinearSearch只获取了传入数组的第一个元素。我通过在函数中放置一个断点并查看它所具有的局部函数来找到它。 ,我不知道为什么它只从阵列7获得a。我的测试用例如下(GoogleTest):

TEST(LinearSearch, ElementExists2Items) {
  // LinearSearch should return a pointer to the item if it exists in the array.
  int a[2] = {7, 2};
  EXPECT_EQ(a, LinearSearch(a, 2, 7));
  EXPECT_EQ(a + 1, LinearSearch(a, 2, 2));
}

这是我的LinearSearch功能:

int* LinearSearch(int theArray[], int size, int key) {
    if (size == 0)
        return nullptr;

    for (int i = 0; i < size; i++) {
        if (key == theArray[i])
            return (theArray);
        else
            return nullptr;
    }
}

我错过了什么吗?我需要通过引用传递theArray吗?我不知道为什么它只将第一个值传递给函数。

1 个答案:

答案 0 :(得分:3)

你是第一次回来。

解决方案或更确切地说是

for (int i = 0; i < size; i++) {
    if (key == theArray[i])
        return (theArray);
    //if it cannot find it the very first time, it returns null IN YOUR CASE :)
}
return nullptr;

你的案例

想想执行。它第一次没有找到它立即返回并退出该功能。因此它只看到一个元素。

for (int i = 0; i < size; i++) {
        if (key == theArray[i])
            return (theArray);
        else
            return nullptr;
    }

更新

for (int i = 0; i < size; i++) {
    if (key == theArray[i])
        return (theArray + i); 
    // you currently pass the pointer to the start of the array again and again. Pass the pointer to the element instead.
}
return null;