这是一个类似于我定义的函数:

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 数组初始化为全零,以上工作原理。 (我假设这是Windows BYTE 类型。)但是如上所述,这很容易泄漏,最好避免使用。

或者您可以使用省略号来模拟数组的构造:

看看这个: http://www.cplusplus.com/ reference / clibrary / cstdarg / va_arg /

如果您真的想在0x到来之前摆弄,请查看此代码

gcc有一个名为“复合文字”的扩展名,允许你写:

Function((BYTE[]){1, 2, 3, 4});

请注意,它是在堆栈上分配的,因此可能不适合您的用途。

好吧,如果BYTE是一个类,你可以有一个构造函数

BYTE::BYTE(char c1,char c2){
 //something here.
}

然后致电

Function( new BYTE(0X00,0X00))

但是,这很容易泄漏。您应该在退出Function之前删除该参数。而且这并不总是可行的(例如,如果你没有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;

请记住,使用 delete [] 删除使用 new [] 创建的数组;

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top