首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何找到int[]的大小?

如何找到int[]的大小?
EN

Stack Overflow用户
提问于 2010-01-10 17:04:55
回答 13查看 200.7K关注 0票数 47

我有过

代码语言:javascript
复制
int list[] = {1, 2, 3};

如何获得list的大小

我知道,对于char数组,我们可以使用strlen(array)来查找大小,或者在数组末尾使用'\0'进行检查。

正如一些答案所说的,我尝试了sizeof(array) / sizeof(array[0]),但它只在主要方面起作用?例如:

代码语言:javascript
复制
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
}

为什么?

EN

回答 13

Stack Overflow用户

发布于 2010-01-10 17:07:23

试试这个:

代码语言:javascript
复制
sizeof(list) / sizeof(list[0]);

因为这个问题被标记为C++,所以建议在C++中使用std::vector,而不是使用传统的C样式数组。

当您将array-type传递给函数时,它将被隐式转换为pointer-type。看看this.

为了正确地打印任何函数中数组的大小,请引用该函数传递数组(但您需要事先知道该数组的大小)。

在一般情况下,你会这样做

代码语言:javascript
复制
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 ;-)]
}
票数 61
EN

Stack Overflow用户

发布于 2010-01-10 17:06:19

这样做的“标准”C方法是

代码语言:javascript
复制
sizeof(list) / sizeof(list[0])
票数 13
EN

Stack Overflow用户

发布于 2010-01-10 17:12:43

您可以使用boost::size,它基本上是这样定义的:

代码语言:javascript
复制
template <typename T, std::size_t N>
std::size_t size(T const (&)[N])
{
    return N;
}

请注意,如果要将大小用作常量表达式,则必须使用sizeof a / sizeof a[0]成语或等待下一个版本的C++标准。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2037736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档