c ++动态数组的初始值

时间:2012-04-24 09:00:28

标签: c++

我需要动态创建一个整数数组。我发现使用静态数组语法

int a [5]={0};

将所有元素的值正确初始化为0。

在创建像

这样的动态数组时,有没有办法做类似的事情
int* a = new int[size];

无需遍历数组的所有元素?或者使用for循环赋值仍然是最佳方法? 感谢

6 个答案:

答案 0 :(得分:35)

当然,只需使用()进行值初始化:

 int* ptr = new int[size]();

(取自this answer到我之前密切相关的问题)

答案 1 :(得分:4)

我会这样做:

int* a = new int[size];
memset(a, 0, size*sizeof(int));

答案 2 :(得分:4)

我建议您使用std::vector<int>std::array<int,5>

答案 3 :(得分:3)

值使用()

初始化元素

示例:

int *p = new int[10];       // block of ten uninitialized ints
int *p2 = new int[10]();    // block of ten ints value initialized to 0

答案 4 :(得分:2)

使用0以外的其他值初始化

指针数组:

int size = 10;
int initVal = 47;
int *ptrArr = new int[size];
std::fill_n(ptrArr, size, initVal);
std::cout << *(ptrArr + 4) << std::endl;
std::cout << ptrArr[4] << std::endl;

对于非指针数组

int size = 10;
int initVal = 47;
int arr[size];
std::fill_n(arr, size, initVal);

对于任何DataType都非常有用!

!注意,一些编译器可能不会抱怨访问数组范围之外的值,这可能会返回非零值

答案 5 :(得分:0)

int *a=new int[n];
memset(a, 0, n*sizeof(int));

将数组的所有字节设置为0.对于char *,也可以使用memset。 有关更正式的定义和用法,请参阅http://www.cplusplus.com/reference/clibrary/cstring/memset/