我想创建一个指向新字节数组的指针,我想立即初始化它。
例如,这可以用于空字节数组:
byte *test = new byte[10];
但是如何创建指向字节数组的指针并立即初始化它?
byte *test = new byte {0x00, 0x01, 0x02, 0x03};
......虽然不起作用。
那怎么办呢?
答案 0 :(得分:1)
不是动态创建数组,而是考虑创建向量:
std::vector<byte> test{0x00, 0x01, 0x02, 0x03};
(需要C ++ 11。)您可以使用&test[0]
获取指向字节的指针。
答案 1 :(得分:0)
std::vector<byte> test{ 0x00, 0x01, 0x02, 0x03 };
现在你有test.data()
作为你的指针。哦,现在你也有自动内存管理。并size()
。并begin()
和end()
。哦,也是例外安全。
答案 2 :(得分:0)
以下是使用C ++ 17 std::byte
类型的版本(应使用-std=c++17
编译器标志):
#include <vector>
#include <cstddef>
#include <iostream>
template <typename ...Args>
std::vector<std::byte> init_byte_vector(Args&& ...args){
return std::vector<std::byte>{static_cast<std::byte>(args)...};
}
int main(void)
{
auto v = init_byte_vector(0x00, 0x01, 0x02, 0x03);
auto v_ptr = v.data();
...
return 0;
}
答案 3 :(得分:-2)
如果你的数组在堆栈中,你可以这样做:
// Assume byte is typedef'd to an actual type
byte test[10]={0x00, 0x01, 0x02, 0x03}; // The remainder of the bytes will be
// initialized with 0x00
// Now use test directly, or you can create a pointer to point to the data
byte *p=test;
对于堆分配,请优先std::vector
与uniform initialization,其他人已经说过。