动态分配的数组

Uno*_*aso 0 c++ arrays parameters function heap-memory

我正在学习指针,但我被困在数组的动态分配上。

下面的代码提供了一个函数来查找具有最低值的元素。动态分配的数组作为参数传递给它。

#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;
}
Run Code Online (Sandbox Code Playgroud)

但它返回此错误:

error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]
Run Code Online (Sandbox Code Playgroud)

如何将该数组传递给函数?

只是出于好奇:如果我的数组由 5 个元素组成,为什么 for 循环允许我输入 4 个值?

Yks*_*nen 9

如何将该数组传递给函数?

nums已经是 type int*,你不需要取消引用它:

findMin(nums, nums_size);
Run Code Online (Sandbox Code Playgroud)

如果我的数组由 5 个元素组成,为什么 for 循环允许我输入 4 个值?

int nums_size = sizeof(*nums);不会做你认为它会做的事情。它相当于sizeof(nums[0]),相当于sizeof(int),恰好4在您的机器上等于。
没有办法提取分配在堆上的数组大小,需要自己保存大小:

int nums_size = 5;
int* nums = new int[nums_size];
Run Code Online (Sandbox Code Playgroud)