Страницы

Поиск по вопросам

среда, 29 января 2020 г.

C++ - передача массива в функцию

#cpp #массивы #функции #gcc


Есть несколько функций, которые принимают в качестве параметра массив целых чисел.

#include 

using namespace std;

// нахождение наибольшего целого числа в массиве        
int FindLargest(int arr[])
{
    int largest = arr[0];
    for (int i = 1; i < arr.size(); i++)
    {
        if ( arr[i] > largest)
        {
            largest = arr[i];
        }
    }

    return largest;
}

// содержатся ли в массиве повторяющиеся элементы
bool ContainsDuplicates(int arr[])
{
    for (int i = 0; i < arr.size(); i++)
    {
        for(int j = 0; j < arr.size(); j++)
        {
            if (i != j)
            {
                if (arr[i] == arr[j]) return true;
            }
        }
    }

    return false;
}

// содержатся ли в массиве повторяющиеся элементы (ver 2.0)
bool ContainsDuplicates2(int arr[])
{
    for (int i = 0; i < (arr.size() - 1); i++)
    {
        for (int j = i + 1; j < arr.size(); j++)
        {
            if (arr[i] == arr[j]) return true;
        }
    }

    return false;
}

int main()
{

}


Компилятор выводит следующие ошибки. Не могу понять в чем они заключаются.

C:\Users\saibo>gcc algorithms.cpp
algorithms.cpp: In function 'int FindLargest(int*)':
algorithms.cpp:21:26: error: request for member 'max_size' in 'arr', which is of
non-class type 'int*'
  for (int i = 1; i < arr.size(); i++)
                          ^~~~
algorithms.cpp: In function 'bool ContainsDuplicates(int*)':
algorithms.cpp:34:26: error: request for member 'max_size' in 'arr', which is of
non-class type 'int*'
  for (int i = 0; i < arr.size(); i++)
                          ^~~~
algorithms.cpp:36:26: error: request for member 'max_size' in 'arr', which is of
non-class type 'int*'
   for(int j = 0; j < arr.size(); j++)
                          ^~~~
algorithms.cpp: In function 'bool ContainsDuplicates2(int*)':
algorithms.cpp:50:27: error: request for member 'max_size' in 'arr', which is of
non-class type 'int*'
  for (int i = 0; i < (arr.size() - 1); i++)
                           ^~~~
algorithms.cpp:52:31: error: request for member 'max_size' in 'arr', which is of
non-class type 'int*'
   for (int j = i + 1; j < arr.size(); j++)
                               ^~~~


Может пишу что-то не так. Буду рад подсказке!
    


Ответы

Ответ 1



arr в int FindLargest(int arr[]) - это не массив, а указатель. (При попытке создать параметр-массив, он автоматически превращается в указатель.) Указатель не знает размер массива, на который указывает. Вам нужно передавать размер массива как отдельный параметр. (Скажем, int FindLargest(int arr[], int size).) И вообще, . может применяться только к классам. Ни массивы, ни указатели не являются классами, так что .size() никак не мог сработать. Или, можно вообще отказаться от массивов и использовать std::vector. Вот на них .size() работает.

Ответ 2



Это вам не Java какая :), это С++ - при передаче массива надо передавать размер отдельно. Или пользоваться классами C++ типа vector, array...

Комментариев нет:

Отправить комментарий