定义正确的参数&在递归函数C ++中传递数组

时间:2014-10-26 01:31:49

标签: c++ arrays recursion binary-search dev-c++

我参加了一个C ++课程,我以前在定义正确的参数方面遇到了困难,所以如果有人能指出我做错了什么就会很好。

这项任务是创建二进制搜索功能,程序将猜测用户正在考虑的数字。

这是我的代码:

#include <iostream>
using namespace std;


int b_search(int Arry[], int L, int R)                
{
   int M = 0;                                         
   char userAnswer = '-';

   M = (L + R) / 2;


   cout << "Is it " << Arry[M] << "? (l/h/z): ";
   cin >> userAnswer;

   if( (userAnswer != 'l') && (userAnswer != 'h') ) { 
      cout << "Thank you!" << endl;                   
   }
   else {                                             
      if (userAnswer == 'l') {                        
        b_search(Arry[], L, M); 
      }
      else {                                          
        b_search(Arry[], ++M, R);                     
      }
   }
   return;      
}


int main()                                            
{
    const int N = 100;
    int A[N];
    int i = 0;
    int value = 1;

    for(i = 0; i < N; ++i) 
    {
        A[i] = value;
        ++value;
    }

   cout << "Choose a number from 1 to 100." << endl << endl;
   cout << "Answer with:" << endl;
   cout << "   l - if your num is lower" << endl;
   cout << "or: " << endl;
   cout << "   h - if your num is higher" << endl;
   cout << "or: " << endl;
   cout << "   any other key if the guess is right." << endl << endl;

   b_search(N, 1, 100)

   return 0;

}

当我编译它时,第一个递归调用的第一个参数出现问题。

这是Code Pad的错误消息:

In function 'int b_search(int*, int, int)':
Line 22: error: expected primary-expression before ']' token
compilation terminated due to -Wfatal-errors.

谢谢!

2 个答案:

答案 0 :(得分:0)

您将b_search定义为接受int数组,int和另一个int。但是,你要做的第一件事是:

b_search(N, 1, 100); // Is invalid since N is an int but the function expects an array.

尝试传入const int,int和int。第一个参数应该是一个int数组,而不是int。

我看到的另一个问题是您尝试重复的b_search定义,您使用第一个参数b_search调用Arry[]。括号无效,因为Arry已经是一个数组,你可以按原样传递它。

答案 1 :(得分:0)

在通过名称引用数组时,不要使用方括号。假设您声明了一个名为A的数组。然后:

A:是一个数组。

A[5]:是A的元素。

A[]:不是有效的表达。

由于您希望以递归方式将数组传递给b_search函数,而不是其任何元素,只需使用Arry

函数声明中的int Arry[]不是表达式,而是声明参数Arry声明符。声明符在某些方面类似于表达式,但具有不同的语法规则。 []在声明符中表示“数组”,但在表达式中不表示。

这里有一个与数组参数相关的微妙之处:当你声明一个函数来获取一个数组参数时,参数的类型会被自动重写成一个指针。所以Arry实际上是一个指针,而不是一个数组。在这种情况下,这个细节是不可见的,因为数组和指针在下标时的行为方式相同,并且数组在按值传递时会自动转换为指针。