有没有办法获取传递给函数的数组的大小?
Posted
技术标签:
【中文标题】有没有办法获取传递给函数的数组的大小?【英文标题】:Is there a way to get the size of an array passed to a function? 【发布时间】:2020-02-20 11:53:45 【问题描述】:我的函数接收一个数组作为参数,但该数组衰减为一个指针,因此 sizeof() 不起作用。我不允许导入任何额外的库,并且该数组作为 int arr[] 传递。当我搜索它时,大多数人只是说在函数之外定义它并将其作为参数传递,但我不能这样做。那么有没有办法让我获得数组大小?
【问题讨论】:
简短回答:不,不可能 简单的回答:不,你不能没有额外的信息。您有一个指向内存中“随机”地址的指针,该指针不知道有多少后续内存是“有效的” 长答案:见***.com/questions/492384/… How to find the 'sizeof' (a pointer pointing to an array)?的可能重复 除非数组有一些结构,比如一个“魔法”值来终止它,否则你不能。我怀疑您遗漏了您的需求中的一些重要信息。 【参考方案1】:一共有三种方式(其实是两种,因为其中两种方式基本相同,只是类不同而已):
-
使用
std::vector
代替数组,使用size
函数获取元素个数
改用std::array
(其实和第一个一样)
使用模板并通过引用传递数组:
template<size_t N>
void my_function(int (&my_array)[N])
std::cout << "The number of elements in the array is " << N << '\n';
如果您让数组衰减为一个指针,那么您所拥有的只是指向数组单个元素的指针。没有关于数组本身的信息,比如它的大小。使用指针时,您需要将大小作为单独的参数传递。
如果不允许更改函数签名,并且该函数仅将指针作为参数,则实际上无法获取数组的大小。对于面试问题,这可能是您应该给出的答案。
如果这是在学校或类似情况下的作业,您必须与老师交谈并告诉他们这是不可能的,或者提出一种您不需要明确要求大小的算法(例如添加某种 终止符 到数组,类似于 C 样式字符串的终止方式)。
【讨论】:
我理解 OP 不允许更改参数,所以我认为这不是一个真正的解决方案。以上是关于有没有办法获取传递给函数的数组的大小?的主要内容,如果未能解决你的问题,请参考以下文章
尝试将数组传递给 ajax 加载函数,但我的控制器没有正确获取数组