【发布时间】:2020-09-13 06:49:40
【问题描述】:
我正在学习指针,但我被困在数组的动态分配上。
下面的代码提供了一个函数来查找具有最低值的元素。 动态分配的数组作为参数传递给它。
#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]
如何将该数组传递给函数?
只是为了好奇:如果我的数组由 5 个元素组成,为什么 for 循环允许我输入 4 个值?
【问题讨论】:
-
请注意,在这种情况下不需要
new。您应该使用int[] nums[5];在堆栈上分配它 - 它更快,并且不会在您需要显式删除的堆上分配内存。 -
*nums是一个int。*是类型的一部分,而不是变量标识符的一部分。 -
想想你是否写过
int* nums = createArray()。在编译时没有办法从一个指向整数的指针知道它指向多少个整数。也许你没有意识到sizeofis a compile-time thing,不是运行时的东西。
标签: c++ arrays function parameters heap-memory