zoukankan      html  css  js  c++  java
  • 获取动态数组指针 所指向数组长度的一种方法

        经常在程序中会动态创建一个数组。将用一个指针来指向这个数组。

        刚学C++,在动手想写东西时,考虑到想要取得这个动态数组的长度。网上找了点资料。基本想没得到好的答案,但看到了有人提到用 _msize取内存计算的方法。我自己测试了一下,貌似可以。

        亲测代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    struct DATA
    {
        int price;
        char name[100];
    };
     
    void fn(DATA *d)
    {
        int n;
        n = _msize(d) / sizeof(DATA); // 这里计算出 d 的数组长度为 13
        cout << n << endl;
    }
     
    int _tmain(int argc, _TCHAR* argv[])
    {
        DATA *d;
        d = new DATA[13];
     
        fn(d);
     
        system("pause");
    }

    _msize 只能取得 new, malloc 分配的内存大小。因此这种方法还是有一定的局限性的。

    如果直接定义了数组的长度。再将数组传递给函数。_msize 是没法取得所传指针内存大小的。如:

    1
    2
    DATA d[10];
    fn(d); // 会触发错误

    但如果只想取 new 动态创建的数据指针,_msize能完全任务。我们还可以用模板的方式,让代码适应性更强些。如:

    取动态数组指针的函数:

    1
    2
    3
    4
    5
    6
    7
    8
    template <class ArrayType> 
    size_t getArrayLen(ArrayType *d)
    {
        size_t n;
        n = _msize(d) / sizeof(ArrayType);
        cout << n << endl;
        return n;
    }
  • 相关阅读:
    win10自动休眠解决方法
    创世纪游戏、黄金分割比
    placeholder和assign速度对比
    内耗
    windows下编写dll
    北航院系和数字的对应关系
    maven Could not resolve dependencies
    java9模块不可见问题
    maven-dependencies插件的模拟实现
    Freemarker简单封装
  • 原文地址:https://www.cnblogs.com/iSixth/p/4182581.html
Copyright © 2011-2022 走看看