获取动态数组指针 所指向数组长度的一种方法

mac2022-06-30  69

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

    刚学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; }

 

转载于:https://www.cnblogs.com/iSixth/p/4182581.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)