zoukankan      html  css  js  c++  java
  • C++获取数组长度

    一、静态数组。

    比如 int int_ary[5] ,静态数组在编译的时候就知道了数组长度,这对编译器来说挺好实现的。

    用得最多的大概就是sizeof了吧:

    #define countof_macro(x) (sizeof((x)) / sizeof(x)[0])

    对于C++,可以用模板。

    如果将数组作为函数形参的话,它会退化成一个指针,但是引用则不会。使用引用带来的另外一个问题就是,声明参数时必须知道数组长度——我要是知道我还费这劲干啥?解决方法就是使用模板,将数组引用的数组大小声明为模板参数:

    //错误的做法:这里形参已经退化为指针了
    int countof_func_para(int int_ary[5])
    {
    	return countof_macro(int_ary);
    }
    
    //正确的做法
    template<size_t n>
    int countof_template(const int (&int_ary)[N])
    {
    	return N;
    }

    二、动态数组。

    动态数组的长度可以在运行时指定,所以编译器也不知道它的长度。但是操作系统总该是知道的,不然释放的时候就知道该释放多少内存了。在VC中,提供了这样的函数用来获取由calloc, malloc, 或者 realloc分配的内存的长度(bytes)。另,据说Borland C和GCC也实现了这个函数。

    size_t _msize(void *);

    注意:若传进去的指针不是指向堆里的区域的话,Debug版会有assertion failed。

  • 相关阅读:
    编译JDK12
    Hexo Next背景动画Canvas_nest:true设置无效
    素数
    Linux 命令行样式
    四种排序算法实现
    Java中的简单容器
    一个关于2的次方问题
    LeetCode--20.有效的括号
    Java中的注释
    关于Metasploitable的测试
  • 原文地址:https://www.cnblogs.com/h46incon/p/2965020.html
Copyright © 2011-2022 走看看