29

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

int a [5]={0};

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

创建动态数组时有没有办法做类似的事情

int* a = new int[size];

无需遍历数组的所有元素?或者也许用 for 循环分配值仍然是最佳方法?谢谢

4

6 回答 6

45

当然,仅()用于值初始化:

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

(取自我之前密切相关的问题的答案)

于 2012-04-24T09:04:53.633 回答
5

我会做:

int* a = new int[size];
memset(a, 0, size*sizeof(int));
于 2012-04-24T09:01:42.790 回答
4

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

于 2012-04-24T09:03:08.697 回答
4

值初始化元素()

例子:

int *p = new int[10];       // block of ten uninitialized ints
int *p2 = new int[10]();    // block of ten ints value initialized to 0
于 2015-09-18T11:22:03.497 回答
3

要使用 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);

几乎适用于任何数据类型!

!小心,一些编译器可能不会抱怨访问超出数组范围的值,这可能会返回非零值

于 2016-10-19T10:59:36.213 回答
0
int *a=new int[n];
memset(a, 0, n*sizeof(int));

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

于 2012-04-24T10:30:55.230 回答