在C ++中初始化已声明的char数组

时间:2010-09-27 15:27:56

标签: c++

我想使用这样的东西:

char theArray[]=new char[8];
theArray= { 1,2,3,4,5,6,7,8};

而不是

char theArray[] = { 1,2,3,4,5,6,7,8};

类似的事情可能吗?

6 个答案:

答案 0 :(得分:6)

的C ++ 0x

char* ch;
ch = new char[8]{1, 2, 3, 4, 5, 6, 7, 8};

@David Thornley:然后切换这些线并没有问题。而且你真的在谈论将char[8]重新分配到与前一个值相同的内存池中,那么你需要使用自己的分配器,例如:

char* ch1 = new char[8]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'i'};
char* ch2 = new(ch1) char[8]{1, 2, 3, 4, 5, 6, 7, 8};

afaik OP不太可能需要它。

答案 1 :(得分:4)

char theArrayCopy[] = { 1,2,3,4,5,6,7,8}; 
//
//
char* theArray=new char[sizeof(theArrayCopy)]; 
// or
char theArray[sizeof(theArrayCopy)]; 

memcpy(theArray, theArrayCopy, sizeof(theArrayCopy));

答案 2 :(得分:3)

您可能想要考虑的一种可能性是使用Boost Assign,您可以使用以下内容:

std::vector<int> v;

v += 1, 2, 3, 4, 5, 6, 7, 8;

虽然它不适用于实际的数组 - 虽然它不一定是矢量,但它确实需要某种集合类,而不是内置类型。 OTOH,如果没有其他非常特定原因,你可能还是想要使用一个集合。

答案 3 :(得分:2)

这很糟糕,我知道,但也适用于这种情况:

memcpy( theArray, "\x01\x02\x03\x04\x05\x06\x07\x08", sizeof(theArray) );

答案 4 :(得分:1)

注意:我知道这不是原始问题的答案,但我认为这是正确的做法,所以我把它作为CW帖子......

如果你想要,你可以稍微概括一下......

class IntegerSequenceGenerator
{
    int step_;
    int value_;
public:
    IntegerSequenceGenerator(int start = 0, int step = 1)
        : step_(step), value_(start) {}
    int operator()() {
        int result = value_ + step_;
        std::swap(result, value_);
        return result;
    }
};

使用:

int main() {
    std::vector<int> myArray;
    std::generate_n(std::back_inserter(myArray), 8, IntegerSequenceGenerator());
}

或者:

int main() {
    std::vector<int> myArray(8);
    std::generate(myArray.begin(), myArray.end(), IntegerSequenceGenerator());
}

或:

int main() {
    int myArray[8];
    std::generate(myArray, myArray + (sizeof(myArray)/sizeof(int)), IntegerSequenceGenerator());
}

答案 5 :(得分:1)

有一个问题,其他答案没有解决。 (虽然有几个确实解决了。)

这会在堆栈中放置一个类型为char[8]的数组:

char theArray[] = { 1,2,3,4,5,6,7,8};

这将它放在堆上(实际上它是非法的,但我会假设您的编译器接受它):

char theArray[]=new char[8];

假设你真的不想在堆上,但只想初始化它,这将有效:

char theArray[max_array_size]; // need to specify size to place on stack

/* code */

static const char theInitializer[] = { 1,2,3,4,5,6,7,8};
std::copy( theInitializer, theInitializer + sizeof theInitializer, theArray );
相关问题