首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何可靠地获取C风格数组的大小?

如何可靠地获取C风格数组的大小?
EN

Stack Overflow用户
提问于 2010-03-09 04:40:58
回答 9查看 8.8K关注 0票数 11

如何可靠地获得C样式数组的大小?通常推荐的方法似乎是使用sizeof,但它在传入xfoo函数中不起作用:

代码语言:javascript
复制
#include <iostream>

void foo(int x[]) {
  std::cerr << (sizeof(x) / sizeof(int)); // 2  
}

int main(){
    int x[] = {1,2,3,4,5};
    std::cerr << (sizeof(x) / sizeof(int)); // 5                              
    foo(x);
    return 0;
}

this question的回答推荐sizeof,但他们并没有这么说(显然是这样?)如果您传递数组,则不起作用。那么,我是不是必须使用一个前哨呢?(我不认为我的foo函数的用户总是可以相信他们会在末尾放置一个标记。当然,我可以使用std::vector,但这样我就得不到很好的简写语法{1,2,3,4,5}了。)

EN

Stack Overflow用户

发布于 2020-10-06 21:28:44

现在,你可以使用C++11的extentrank了。

举个例子:

代码语言:javascript
复制
#include <iostream>
#include <type_traits>

int main()
{
  int a[][3] = {{1, 2, 3}, {4, 5, 6}};

  std::cout << "\nRank:           : " << std::rank<decltype(a)>::value;
  std::cout << "\nSize: [_here_][]: " << std::extent<decltype(a), 0>::value;
  std::cout << "\nSize: [][_here_]: " << std::extent<decltype(a), 1>::value;
  std::cout << "\nSize: [][]_here_: " << std::extent<decltype(a), 2>::value;
}

打印:

等级::2大小:_here_:2大小::3大小:_here_:0

票数 1
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2404567

复制
相关文章

相似问题

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