c - 如何检测作为参数传递的数组的大小?

标签 c arrays pointers

<分区>

在 sizeof 参数的帮助下,我知道如何在创建数组后检测它的大小:

int arr[10];
printf("%i",sizeof(arr)/sizeof(int));

但据我所知,当我将一个数组作为参数传递给一个函数时,我实际上传递了一个指向数组第一个元素的指针,而不是实际的数组。因此,如果我将使用 sizeof 运算符,我将获得指针的大小。

我知道我可以通过搜索“\0”找到字符串(字符数组)的大小。因此,假设我们正在谈论 int 数组;

如何检测作为参数传递的数组的大小?

最佳答案

像往常一样,当问到这个问题时,会出现大量的答案,说您必须将元素的数量作为参数传递给函数。

当然,这是不正确的。如果函数需要知道数组中元素的数量,您必须向函数提供信息,但可以通过多种方式提供。这最简单地通过参数,但也可能通过零个或多个参数的任意组合、全局状态、参数或全局状态直接或间接指向的信息、从先前函数调用中记住的静态信息、数组本身的某些质量(例如哨兵)、编译时常量或几乎任何其他可以想象的方式,并且该数字可能明确存在于上述任何一种方式中,也可能是根据信息计算或推导出来的。

关于无法获取数组中元素数量的唯一方法是通过应用于传递的指针的标准 C 机制。

关于c - 如何检测作为参数传递的数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15883793/

相关文章:

c - #define 在 C 中使用 if-else 逻辑

c - va_list 的定义是什么?

c - 在 C 中打印字符串的随机尾随字符

c - "array of pointers"中指针的初始值是多少?

c++ - 指针运算后丢失数据的列表列表

c - 如何从其他目录中将头文件包含在.c中

c - 为什么在 Linux 上字符串文字的内存地址与其他的如此不同?

java - 如何阻止线程接管另一个线程作业?

java - 由于某种原因,循环没有打印出正确的数组值

c - 为什么数组的地址等于它在 C 中的值?