如何创建指向字节数组的指针?

时间:2014-05-06 18:41:21

标签: c++ arrays pointers byte

我想创建一个指向新字节数组的指针,我想立即初始化它。

例如,这可以用于空字节数组:

byte *test = new byte[10];

但是如何创建指向字节数组的指针并立即初始化它?

byte *test = new byte {0x00, 0x01, 0x02, 0x03};

......虽然不起作用。

那怎么办呢?

4 个答案:

答案 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::vectoruniform initialization,其他人已经说过。