这是一个类似于我定义的函数:
void Function( BYTE *data );
我想做的是这样的事情:
Function( new BYTE { 0x00, 0x00 } );
答案 0 :(得分:6)
您不能将数组初始化语法与使用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]);
答案 1 :(得分:5)
BYTE foo[] = { 0x00, 0x00 };
Function( foo );
C ++ 0x将引入初始化列表语法,允许更接近您想要的内容。
答案 2 :(得分:2)
#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
数组初始化为全零,则上述工作正常。 (我假设这是Windows BYTE
类型。)但是如上所述,这很容易泄漏,最好避免使用。
答案 3 :(得分:1)
或者您可以使用省略号来模拟数组的构造:
看看这个:http://www.cplusplus.com/reference/clibrary/cstdarg/va_arg/
如果你真的想在0x到来之前摆弄,请看看this code。
答案 4 :(得分:1)
gcc有一个名为“复合文字”的扩展名,允许你写:
Function((BYTE[]){1, 2, 3, 4});
请注意,它是在堆栈上分配的,因此可能不适合您的用途。
答案 5 :(得分:0)
好吧,如果BYTE是一个类,你可以有一个构造函数
BYTE::BYTE(char c1,char c2){
//something here.
}
然后致电
Function( new BYTE(0X00,0X00))
但是,这很容易泄漏。您应该在退出Function之前删除该参数。而且这并不总是可行的(例如,如果你没有Function的来源)
答案 6 :(得分:0)
辅助功能;
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[]
创建的数组