如何计算传递给函数的数组大小

时间:2014-02-22 09:44:19

标签: c arrays function

查看以下代码

void fun( int *p )
{
    // is there any solution to calculate size of array as we are not explicitly passing its size.
}

void main ()
{
    int a[5];
    fun (a);
}

是否有任何解决方案来计算函数中的数组大小或显式传递其大小是唯一的解决方案?

3 个答案:

答案 0 :(得分:2)

你不能。

它只是一个指针,它不包含数组的大小信息。这就是为什么将数组大小作为第二个参数传递给函数的常见实现。

答案 1 :(得分:2)

指针p不包含有关数组大小的数据。您没有完全 将大小作为参数传递 - 您可以使用类似字符串的0来结束数组,或者对长度进行硬编码,或者执行其他任何操作事情 - 但如果没有某种额外的机制,你就无法从指针中获得长度。

答案 2 :(得分:1)

将数组传递给函数时,数组会隐式转换为指向其第一个元素的指针。因此,您实际传递的是指向数组的第一个元素的指针,而不是数组本身。实际上,您无法从函数传递或返回数组。它们不是C中的第一类对象。因此,您还必须将数组的长度传递给函数。

void fun(int *p, int len) {
    // function body
}

int main(void) {
    int a[5];
    fun(a, 5);
}