是否可以使用函数获取数组的长度?
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]);
这使得表达式独立于硬编码数据类型,保留了实际用途。
据我所知,下面的代码可以用来获取一个数组(在这个例子中是一个整数数组)的长度(意思是它包含多少项):
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]);
这使得表达式独立于硬编码数据类型,保留了实际用途。