是否可以使用函数获取数组的长度?

时间:2017-05-21 17:39:45

标签: c arrays sizeof

据我所知,以下代码可用于获取数组的长度(表示它包含多少项)(在本例中为整数数组):

int arrayOfInt[] = { 10, 20, 30, 40, 50 };

int lenght = sizeof(arrayOfInt) / sizeof(int);

这给出“5”作为输出,这是正确的。 但是,如果我在函数中使用相同的代码,则它不起作用。

int getLenght(int intArray[])
{
    return sizeof(intArray) / sizeof(int);
}

lenght = getLenght(arrayOfInt);

使用上面的函数,我得到“1”作为输出。哪个不对。为什么会这样?我做错了还是不可能?

1 个答案:

答案 0 :(得分:5)

这是不可能的。当作为函数参数传递时,数组衰减到指向第一个元素的指针,所以基本上,在函数内部,你只需要一个指向数组第一个元素的指针。

此外,sizeof运算符处理提供的变量 type ,它无法在转换之前知道的实际类型。

详细说明,

 int getLenght(int intArray[])

 int getLenght(int *intArray)

功能和行为相同。它不再是数组了。

话虽如此,只是一个建议,一个更健壮的方法来获得数组中的元素数量

  int length = sizeof(arrayOfInt) / sizeof(arrayOfInt[0]);

这使得表达式独立于硬编码数据类型,保留了实际目的。