在 sizeof 参数的帮助下,我知道如何在创建数组后检测它的大小:
int arr[10];
printf("%i",sizeof(arr)/sizeof(int));
但据我所知,当我将一个数组作为参数传递给一个函数时,我实际上传递了一个指向数组第一个元素的指针,而不是实际的数组。因此,如果我将使用 sizeof 运算符,我将获得指针的大小。
我知道我可以通过搜索“\0”找到字符串(字符数组)的大小。因此,假设我们正在谈论 int 数组;
如何检测作为参数传递的数组的大小?
像往常一样,当问到这个问题时,会出现大量的答案,说您必须将元素的数量作为参数传递给函数。
当然,这是不正确的。如果函数需要知道数组中元素的数量,您必须向函数提供信息,但可以通过多种方式提供。这最简单地通过参数,但也可能通过零个或多个参数的任意组合、全局状态、参数或全局状态直接或间接指向的信息、从先前函数调用中记住的静态信息、数组本身的某些质量(例如哨兵)、编译时常量或几乎任何其他可以想象的方式,并且该数字可能明确存在于上述任何一种方式中,也可能是根据信息计算或推导出来的。
关于无法获取数组中元素数量的唯一方法是通过应用于传递的指针的标准 C 机制。