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

本文介绍了一种在C++中获取动态创建数组长度的方法,使用_msize函数结合sizeof运算符实现。并通过示例代码展示了如何针对不同类型的动态数组计算其长度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值