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;
    }
  • 相关阅读:
    jmeter怎么衡量tps的值
    QPS、TPS、并发用户数、吞吐量关系
    PPAPI插件开发指南
    WebRTC手记之WebRtcVideoEngine2模块
    WebRTC手记Channel概念
    WebRTC手记之本地音频采集
    WebRTC手记之本地视频采集
    WebRTC手记之框架与接口
    WebRTC手记之初探
    Chromium的GPU进程启动流程
  • 原文地址:https://www.cnblogs.com/iSixth/p/4182581.html
Copyright © 2011-2022 走看看