Динамически выделяемый массив - PullRequest
0 голосов
/ 26 мая 2020

Я изучаю указатели, но я застрял на динамическом c распределении массивов.

Приведенный ниже код предоставляет функцию для поиска элемента с наименьшим значением. В качестве параметра ему передается динамически распределенный массив.

#include <cstdlib>
#include <iostream>

using namespace std;

int findMin(int *arr, int n);

int main()
{
    int *nums = new int[5];
    int nums_size = sizeof(*nums);

    cout << "Enter 5 numbers to find the minor:" << endl;
    for(int i = 0; i < nums_size; i++)
        cin >> nums[i];

    cout << "The minor number is " << findMin(*nums, nums_size);

    delete [] nums; 

    return 0;
}

Но он возвращает эту ошибку:

error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]

Как я могу передать этот массив функции?

Просто из любопытства: почему for l oop позволяет мне ввести 4 значения, если мой массив состоит из 5 элементов?

Ответы [ 2 ]

9 голосов
/ 26 мая 2020

Как передать этот массив функции?

nums уже является типом int*, вам не нужно разыменовать его:

findMin(nums, nums_size);

почему for l oop позволяет мне ввести 4 значения, если мой массив состоит из 5 элементов?

int nums_size = sizeof(*nums); не делает то, что вы думаете . Это эквивалентно sizeof(nums[0]), что эквивалентно sizeof(int), которое на вашем компьютере равно 4.
Невозможно извлечь размер массива, выделенного в куче, вам нужно сохранить размер самостоятельно:

int nums_size = 5;
int* nums = new int[nums_size];
0 голосов
/ 26 мая 2020
#include <cstdlib>
#include <iostream>

using namespace std;

int findMin(int *arr, int n){
    int mn=INT_MAX;
    for(int i=0;i<n;i++){
        if(arr[i]<mn){
            mn=arr[i];
        }
    }
    return mn;
};

int main()
{
    int nums_size = 5; 
    int *nums = new int[nums_size];

    cout << "Enter 5 numbers to find the minor:" << endl;
    for(int i = 0; i < nums_size; i++)
        cin >> nums[i];

    cout << "The minor number is " << findMin(nums, nums_size);

    delete [] nums; 

    return 0;
}

Приведенный выше код работает нормально. Ваша ошибка заключалась в передаче массива в функцию.

Также добавить -

Ваш код сделал только 4 итерации, потому что sizeof(*nums) вернул размер элемента базового индекса, указанного указателем, т. Е. sizeof (число [0]). Я внес небольшие изменения, и теперь все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...