2012-08-30 55 views
0

有设置数组上的元素的方法 - int rgArrayNum [] = {16, 2, 77, 40, 12071}; 如何在新的指针上使用相同的方法?我试过int *pArrayNum = new [] = {4 ,3 ,3} ;,但它没有奏效。使用新的设置数组元素

回答

7

,你可以写:

int *pArrayNum = new int[3]{4, 3, 3}; 

然而,在数组新的初始化是不允许的;你不得不成员从堆栈上的一组单独或通过复制初始化:

int rgArrayNum [] = {16, 2, 77, 40, 12071}; 
int *pArrayNum = new int[sizeof rgArrayNum/sizeof rgArrayNum[0]]; 
std::copy(&rgArrayNum[0], &rgArrayNum[sizeof rgArrayNum/sizeof rgArrayNum[0]], 
    pArrayNum); 
+1

你需要一个'[3]'那里。它不会从初始化列表推断大小。 –

+0

@ecatmur:我试过你的代码,并得到错误“没有匹配函数调用'copy(int [5],int&,int *&)'”。我添加了#include 。我不是真的? – URL87

+0

@ URL87我在第二个参数上忘记了一个'&'。固定。 – ecatmur

3

在C++ 03和更早的版本,你不能初始化动态数组的值来任何东西,除了零。

可以实现类似于C++ 11的东西:

int *pArrayNum = new int [3] {4, 3, 3}; 

,或者如果你不介意使用的容器来管理你的记忆:

std::vector<int> array = {4, 3, 3}; 
+2

虽然'矢量'毫无疑问是优越的答案,你可以在没有容器'new int [3] {4,3,3};'的情况下做到这一点。不过,我不明白为什么有人会想要。 –

+0

@ R.MartinhoFernandes:所以你可以。今天我学到了一些东西。 –

+0

@ R.MartinhoFernandes:它只是个例子,我的意思是动态元素的数量。 – URL87

0

你必须创建该数组不是整数,而是整数指针。

int* rgArrayNum2 [] = {new int(16), new int(16), new int(16), new int(16), new int(16)}; 

//test 
int* test = rgArrayNum2[2]; 
*test = 15; 

现在rgArrayNum2 [2]是15

+0

不确定这是OP想要的 – SirDarius

相关问题