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

Is it possible to get the length of an array using a function?

据我所知,下面的代码可以用来获取一个数组(在这个例子中是一个整数数组)的长度(意思是它包含多少项):

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”作为输出。这是不正确的。为什么会这样?我做错了什么还是不可能的?

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

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

详细说明,

 int getLenght(int intArray[])

 int getLenght(int *intArray)

在功能和行为上都相同。它不再是 数组


话虽如此,这只是一个建议,获取数组中元素数量的更可靠方法是

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

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