传递给函数时数组为空

时间:2014-03-27 08:00:21

标签: c++ arrays

我有以下代码正在进行二进制搜索,基于数组和值来查找传递给函数的代码。但是,当我进入函数时,数组没有值。为什么会这样?我已经看了,我相信在传递数组方面一切都是正确的。

 #include <iostream>
using namespace std;

int binSearch(int [], int , int , int);

void main()
{
    int a[10];
    int low;
    int high;
    int searchValue;

    for (int i = 0; i < 10; i++)
    {
        a[i] = i;           
    }

    low = 0;
    high = 9;
    searchValue = 6;
    int searchResult = binSearch(a, low, high, searchValue);
    cout << searchResult << endl;
}

int binSearch(int a[], int low, int high, int searchValue)
{
    int newHigh;

    newHigh = (low + high) / 2;

    if (low > high)
    {
        return -1;
    }

    else if (high == low)
    {
        if (a[high] == searchValue)
        {
            return high;
        }

        else
        {
            return -1;
        }
    }

    else if (a[newHigh] < searchValue)
    {
        return binSearch(a, low, newHigh, searchValue);
    }

    else
    {
        return binSearch(a, newHigh, high, searchValue);
    }
}

3 个答案:

答案 0 :(得分:4)

当您将数组传递给函数时,它被称为"decay" into a pointer。 C ++中的数组是二等公民,只要你将它们传递到某个地方,它们就会自动转换为指向第一个元素的指针。这意味着当你检查函数内部的“数组”时,你实际上是在查看第一个元素的值(因为数组衰减到指向第一个元素的指针)。

此时您可以将其作为数组进行检查的一种方法是将其添加到监视窗口(右键单击 - &gt;添加监视,或在监视窗口中键入变量名称)和put a comma next to it along with the size of the array

例如,在bin_search函数中,在监视窗口中键入a, 10将显示a指向的前10个元素。

答案 1 :(得分:1)

阵列很好。 main()应该在C ++中返回int,二进制搜索算法需要更正。

#include <iostream>
using namespace std;

int binSearch(int [], int , int , int);

int main()
{
    int a[10];
    int low;
    int high;
    int searchValue;

    for (int i = 0; i < 10; i++)
    {
        a[i] = i;
    }

    low = 0;
    high = 9;
    searchValue = 6;
    int searchResult = binSearch(a, low, high, searchValue);
    cout << searchResult << endl;
    return 0;
}

int binSearch(int a[], int low, int high, int searchValue)
{
    int mid;

    mid = (low + high) / 2;

    if (low > high)
    {
        return -1;
    }

    if (a[mid] == searchValue)
    {
        return mid;
    }    
    else if (a[mid] < searchValue)
    {
        return binSearch(a, mid+1, high, searchValue);
    }    
    else
    {
        return binSearch(a, low, mid-1, searchValue);
    }
}

答案 2 :(得分:0)

只是改变 int binSearch(int a[], int low, int high, int searchValue)

int binSearch(int* a, int low, int high, int searchValue)