這是類似於我已經定義了一個函數:C++ - 傳遞數組的方法
void Function(BYTE *data);
我想什麼做的是這樣的:
Function(new BYTE { 0x00, 0x00 });
這是類似於我已經定義了一個函數:C++ - 傳遞數組的方法
void Function(BYTE *data);
我想什麼做的是這樣的:
Function(new BYTE { 0x00, 0x00 });
不能使用使用new
動態分配數組的數組初始化語法。你可以這樣做:
BYTE *ary=new BYTE[2];
ary[0] = 0;
ary[1] = 0;
Function(ary);
delete [] ary;
但是,爲什麼你在這裏使用動態分配的內存?數組是否保持在當前函數的範圍之外?如果沒有,則可以使用在棧上分配的數組:
BYTE ary[2] = {0};
Function(ary);
在C++中,優選的方法是使用STL類std::vector
,其作用就像一個動態分配的(但類型安全)陣列:
std::vector<BYTE> ary(2);
Function(&ary[0]);
好吧,如果一個字節是一個類,你可以有一個構造函數
BYTE::BYTE(char c1,char c2){
//something here.
}
,然後調用
Function(new BYTE(0X00,0X00))
但是,這是容易泄漏的。在退出函數之前,您應該刪除參數。而這並不總是可能的(例如,如果你不具備功能的源)
BYTE foo[] = { 0x00, 0x00 };
Function(foo);
的C++ 0x將引入初始化列表語法,將允許一些靠近你上面想要的東西。
輔助功能;
BYTE* makeNaryByteArray(int n, BYTE exemplar = 0) {
BYTE* r = new BYTE[ n ];
for(int i = 0 ; i < n ; ++i)
n[i] = exemplar;
return r;
}
//call them:
BYTE* myByteArray;
Function(myByteArray = makeNaryByteArray(2));
// done with array:
delete[] myByteArray;
只要記住,用new[]
創建的陣列與delete[]
刪除;
#include <windows.h>
#include <iostream>
using namespace std;
void foo(BYTE *d) {
cout << (int)d[ 0 ] << " " << (int)d[ 1 ] << endl;
}
int main(void)
{
foo(new BYTE[ 2 ]());
return 0;
}
上述的工作,如果你只是想要初始化數組全部爲零。 (我假設這是Windows類型。)但是,如上所述,這很容易泄漏,最好避免。
您也可以用省略號來模仿你的陣列的建設:
在此我們來看一看:http://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/
如果你真的想編造0X到達之前,先來看看this code。
GCC有所謂的「複合文字」的延伸,它允許你寫:
Function((BYTE[]){1, 2, 3, 4});
請注意,這是在棧上分配的,所以它可能不適合你的目的。
我會樂意在這裏出門,建議「BYTE」不是一個班的名字。雖然 – 2009-05-01 04:14:57
@ 1800,但在盒子外面思考的很好。可能是正確的。也許它可以作爲一個包裝器發揮可能的解決方案? – Tom 2009-05-01 04:59:28
在函數重載的幫助下,我相信沒有什麼能夠防止隱式使用智能指針來處理刪除操作。 – 2009-05-01 09:53:04