这是一个类似于我定义的函数:
void Function( BYTE *data );
我想做的是这样的:
Function( new BYTE { 0x00, 0x00 } );
这是一个类似于我定义的函数:
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 foo[] = { 0x00, 0x00 };
Function( foo );
C++0x 将引入初始化列表语法,这将允许更接近您上面想要的东西。
#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;
}
如果您想要的只是将BYTE
数组初始化为全零,则上述方法有效。(我假设这是 WindowsBYTE
类型。)但是,如前所述,这很容易泄漏,最好避免。
或者您可以使用省略号来模拟数组的构造:
看看这个:http ://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/
如果你真的想在 0x 到达之前摆弄,看看这段代码。
gcc 有一个名为“Compound literals”的扩展,它允许您编写:
Function((BYTE[]){1, 2, 3, 4});
Note that it is allocated on the stack, so it might not be suitable for your purposes.
好吧,如果 BYTE 是一个类,你可以有一个构造函数
BYTE::BYTE(char c1,char c2){
//something here.
}
然后打电话
Function( new BYTE(0X00,0X00))
但是,这很容易泄漏。您应该在退出函数之前删除参数。这并不总是可能的(例如,如果您没有 Function 的源代码)
辅助功能;
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[]