经常在程序中会动态创建一个数组。将用一个指针来指向这个数组。
刚学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;
}
|