C++ 传递给函数时数组为空

C++ 传递给函数时数组为空,c++,arrays,C++,Arrays,下面的代码基于数组和值进行二进制搜索,以查找传递给函数的值。但是,当我进入函数时,数组没有值。为什么会这样?我已经看过了,我相信在通过阵列方面一切都是正确的 #include <iostream> using namespace std; int binSearch(int [], int , int , int); void main() { int a[10]; int low; int high; int searchValue;

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

 #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);
    }
}
#包括
使用名称空间std;
int-binSearch(int[],int,int,int,int);
void main()
{
INTA[10];
int低;
int高;
整数搜索值;
对于(int i=0;i<10;i++)
{
a[i]=i;
}
低=0;
高=9;
搜索值=6;
int searchResult=bin搜索(a、低、高、搜索值);

CUT< P>当你把数组传递到函数时,C++中的数组是第二类公民,任何时候你都会把它们自动传递到第一个元素的指针上。这意味着当你检查函数中的“数组”时,实际上是在观察第一个元素的值。(因为数组中的一个元素衰减为指向第一个元素的指针)

此时可以将其作为数组进行检查的一种方法是将其添加到监视窗口(右键单击->添加监视,或在监视窗口中键入变量名)并单击

例如,在BINTHORKING函数中,在观察窗口中键入代码> 10,代码>将显示由A/< P> > P >指向的前10个元素。数组(C++)应该返回C++中的int和二进制搜索算法需要纠正。< /P>

#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);
    }
}
#包括
使用名称空间std;
int-binSearch(int[],int,int,int,int);
int main()
{
INTA[10];
int低;
int高;
整数搜索值;
对于(int i=0;i<10;i++)
{
a[i]=i;
}
低=0;
高=9;
搜索值=6;
int searchResult=bin搜索(a、低、高、搜索值);
不能改变吗
int-bin搜索(int a[],int-low,int-high,int-searchValue)


int-bin搜索(int*a、int-low、int-high、int-searchValue)

…数组没有值…您如何注意到?数组确实有值,但您的算法是错误的。我正在使用visual studio调试,当我在进入binSearch之前将鼠标悬停在主函数的数组上时,我看到它有我放入的值。然后我进入binSearch,然后当我将鼠标悬停在数组上时,它没有values存储binSearch中的“数组”不是数组。它是指针。您需要更改检查值的方式。将
a,10
放在手表窗口中。谢谢,这很有帮助。我将参数更改为
(&a)[10]
而且它工作得很好。现在只需要更改算法,因为正如上面指出的,它是不正确的。你所说的“将参数更改为
(&a)[10]
”是什么意思,我不太确定我是否理解你的意思。不,我做了
int-bin搜索(int(&a)[10],int,int,int,int)
这有助于我理解为什么我认为它没有通过,而实际上发生的是你所描述的“衰退”。在你的帮助和下面的答案的帮助下,我现在意识到,真正的问题在于算法,为什么我没有得到我应该得到的结果。@PeterClark:“将数组传递到函数中时,称为“衰减”-更准确地说,是将数组传递到
int*
类型的函数参数,并结合标准命令all
int[]
参数被处理为
int*
s,在这里踢入会导致衰减。如果函数接受数组,则可以将数组无衰减地传递到函数中,例如:
void f(int(&x)[4])
-但是大小必须完全匹配(尽管
模板void f(int(&x)[N])
是合法的)。需要C.T.const size。这是否有助于VS调试器,我不知道,但我怀疑会有帮助。@TonyD VS调试器确实能够识别使用数组引用的情况,并给出了所需的结果(刚刚用VS2012对其进行了测试)。非常感谢!一直以来都是算法给了我-1,因为它进入了错误的分支。然而,我也了解到传递的是指向第一个元素的指针,这就是为什么我在调试时看到它时会看到零。对于其他情况,在递归调用中它不应该是
mid-1
,它应该是mid
。这是因为整数除法的工作方式,如果您尝试搜索中间值,它将不会像以前那样工作。否则,所有工作都很好,谢谢。您建议的两个函数签名都是等效的。数组自然会衰减为指针。此外,使用数组语法来指示也没有问题确定参数是数组。