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

Ric*_*o Z -1 c arrays sizeof

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

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

int lenght = sizeof(arrayOfInt) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)

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

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

lenght = getLenght(arrayOfInt);
Run Code Online (Sandbox Code Playgroud)

使用上面的函数,我得到"1"作为输出.哪个不对.为什么会这样?我做错了什么或不可能?

Sou*_*osh 5

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

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

详细说明,

 int getLenght(int intArray[])
Run Code Online (Sandbox Code Playgroud)

 int getLenght(int *intArray)
Run Code Online (Sandbox Code Playgroud)

功能和行为相同.它不再是一个阵列了.


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

  int length = sizeof(arrayOfInt) / sizeof(arrayOfInt[0]);
Run Code Online (Sandbox Code Playgroud)

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