獲取動態陣列指標 所指向陣列長度的一種方法
阿新 • • 發佈:2019-01-28
經常在程式中會動態建立一個數組。將用一個指標來指向這個陣列。
剛學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;
}
|