error: invalid types 'int[int]' for array subscript in c++

error: invalid types 'int[int]' for array subscript in c++

我是 C++ 新手。谁能指导我如何在函数中传递数组?

基本上,我试图通过线性搜索找到一个数字并在 C++ 中打印该数字的索引

   // linear search 
    #include <iostream>
    using namespace std;
    
    int search(int arr, int n, int x)
    {
        int i=0;
        for (i = 0; i < n; i++){
            if (arr[i] == x){
                return i;}
        }
        return -1;
    }
    
    // Driver code
    int main(void)
    {
        int size;
        int temp;
        cout << "Enter Size of Arry";
        cin >> size;
        int  arr[size];
        for(int i=0;i<size;i++){
            cout << "Enter a " << i << "Element of your arry : ";
            cin >> temp;
            arr[i]=temp;
    
        }
        
    
         cout << "Enter the number that you will find index";
            int x;
         cin >> x;
        // Function call
        int result = search(arr, size, x);
        (result == -1)
            ? cout << "Element is not present in array"
            : cout << "Element is present at index " << result;
        return 0;
    }

这是错误

Q1.cpp: In function 'int search(int, int, int)':
Q1.cpp:9:12: error: invalid types 'int[int]' for array subscript
   if (arr[i] == x){
            ^
Q1.cpp: In function 'int main()':
Q1.cpp:35:34: error: invalid conversion from 'int*' to 'int' [-fpermissive]
  int result = search(arr, size, x);
                                  ^

对于像这样的初学者可变长度数组

int  arr[size];

不是标准的 C++ 功能。相反,在 C++ 程序中使用标准容器 std::vector<int> 会好得多。

其次函数声明不正确。第一个参数声明为 int 类型。

int search(int arr, int n, int x)

您需要通过以下方式声明函数

int search(int arr[], int n, int x)

或等同于

int search(int *arr, int n, int x)

注意C++中有标准算法std::find可以在容器中搜索元素。

首先在C++中,数组的大小必须是编译时常量。所以,以下面的代码为例片段:

int n = 10;
int arr[n]; //INCORRECT because n is not a constant expression

上面的正确写法是:

const int n = 10;
int arr[n]; //CORRECT

同样,以下(您在代码示例中所做的)是不正确的:

    int size;
    int temp;
    cout << "Enter Size of Arry";
    cin >> size;
    int  arr[size];//INCORRECT because variable size is not a constant  expression

您应该使用 std::vector 来达到您的目的,如下所示:

#include <iostream>
#include <vector>
using namespace std;
//the first argument is a vector<int>
int search(std::vector<int> arr, int x)
{
    int i=0;
    for (i = 0; i < arr.size(); i++){//use size()member function
        if (arr[i] == x){
            return i;}
    }
    return -1;
}

// Driver code
int main(void)
{
    int size;
    int temp;
    cout << "Enter Size of Arry";
    cin >> size;
    //create a vector instead of an array 
    std::vector<int> arr(size);
    for(int i=0;i<arr.size();i++){//use the size member function
        cout << "Enter a " << i << "Element of your arry : ";
        cin >> temp;
        arr[i]=temp;

    }
    

     cout << "Enter the number that you will find index";
        int x;
     cin >> x;
    // Function call
    int result = search(arr,  x);//no need to pass the size of the vector
    (result == -1)
        ? cout << "Element is not present in array"
        : cout << "Element is present at index " << result;
    return 0;
}

请注意,您也可以使用 std::find 而不是编写自己的搜索算法。