我有过
int list[] = {1, 2, 3};如何获得list的大小
我知道,对于char数组,我们可以使用strlen(array)来查找大小,或者在数组末尾使用'\0'进行检查。
正如一些答案所说的,我尝试了sizeof(array) / sizeof(array[0]),但它只在主要方面起作用?例如:
int size(int arr1[]){
return sizeof(arr1) / sizeof(arr1[0]);
}
int main() {
int list[] = {1, 2, 3};
int size1 = sizeof(list) / sizeof(list[0]); // ok
int size2 = size(list_1); // no
// size1 and size2 are not the same
}为什么?
发布于 2010-01-10 17:07:23
试试这个:
sizeof(list) / sizeof(list[0]);因为这个问题被标记为C++,所以建议在C++中使用std::vector,而不是使用传统的C样式数组。
当您将array-type传递给函数时,它将被隐式转换为pointer-type。看看this.
为了正确地打印任何函数中数组的大小,请引用该函数传递数组(但您需要事先知道该数组的大小)。
在一般情况下,你会这样做
template<typename T,int N>
//template argument deduction
int size(T (&arr1)[N]) //Passing the array by reference
{
return sizeof(arr1)/sizeof(arr1[0]); //Correctly returns the size of 'list'
// or
return N; //Correctly returns the size too [cool trick ;-)]
}发布于 2010-01-10 17:06:19
这样做的“标准”C方法是
sizeof(list) / sizeof(list[0])发布于 2010-01-10 17:12:43
您可以使用boost::size,它基本上是这样定义的:
template <typename T, std::size_t N>
std::size_t size(T const (&)[N])
{
return N;
}请注意,如果要将大小用作常量表达式,则必须使用sizeof a / sizeof a[0]成语或等待下一个版本的C++标准。
https://stackoverflow.com/questions/2037736
复制相似问题