据我所知,以下代码可用于获取数组的长度(表示它包含多少项)(在本例中为整数数组):
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"作为输出.哪个不对.为什么会这样?我做错了什么或不可能?
这是不可能的.当作为函数参数传递时,数组衰减到指向第一个元素的指针,所以基本上,在函数内部,你所拥有的只是指向数组第一个元素的指针.
此外,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)
这使表达式独立于硬编码数据类型,保留了实际目的.