Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在初始化指向同一数组的指针之前初始化该数组_C++_Arrays_Pointers - Fatal编程技术网

C++ 在初始化指向同一数组的指针之前初始化该数组

C++ 在初始化指向同一数组的指针之前初始化该数组,c++,arrays,pointers,C++,Arrays,Pointers,我想初始化一个数组,然后初始化指向该数组的指针 int *pointer; pointer = new int[4] = {3,4,2,6}; delete[] pointer; pointer = new int[4] = {2,7,3,8}; delete[] pointer; 我该怎么做呢?为什么不使用 int array[4] = {3, 4, 2, 6}; 您希望从堆中为数组分配内存的原因是什么 评论后的建议: int arrays[32][4] = {{3, 4, 2, 6},

我想初始化一个数组,然后初始化指向该数组的指针

int *pointer;
pointer = new int[4] = {3,4,2,6};
delete[] pointer;
pointer = new int[4] = {2,7,3,8};
delete[] pointer;
我该怎么做呢?

为什么不使用

int array[4] = {3, 4, 2, 6};
您希望从堆中为数组分配内存的原因是什么

评论后的建议:

int arrays[32][4] = {{3, 4, 2, 6}, {3, 4, 1, 2}, ...} int *pointers[4]; pointers[0] = arrays[0]; pointers[1] = arrays[12]; pointers[2] = arrays[25]; pointers[3] = arrays[13]; ... pointers[0] = arrays[13]; pointers[1] = arrays[11]; pointers[2] = arrays[21]; pointers[3] = arrays[6]; int数组[32][4]={{3,4,2,6},{3,4,1,2},…} int*指针[4]; 指针[0]=数组[0]; 指针[1]=数组[12]; 指针[2]=数组[25]; 指针[3]=数组[13]; ... 指针[0]=数组[13]; 指针[1]=数组[11]; 指针[2]=数组[21]; 指针[3]=数组[6]; 编辑:正如注释中指出的,这是C++0x语法。要在早期版本中执行此操作,请编写一个函数,该函数采用堆栈数组+大小,在堆上分配新数组,循环遍历堆栈数组填充堆数组,然后返回指向堆数组的指针

int* foo( const int size, int *array )
{
   int *newArray = new int[size];
   for( int index = 0; index < size; ++index )
   {
      newArray[index] = array[index];
   }

   return newArray;
}

它需要两行,但至少比逐行初始化容易。

正如其他人所指出的,您可以初始化非堆数组,例如:

//initialize the array
int array[] = {3,4,2,6};
// initialize a pointer to that array
int *pointer = array;
 static const int ar1[4] = { ... };
 static const int ar2[4] = { ... };
然后从静态数据初始化动态分配的数组:

void func()
{
    int *pointer = new int[4];
    ...
    memcpy(pointer, ar1, sizeof(ar1));
    ...
    memcpy(pointer, ar2, sizeof(ar2));
    ...

您可以使用标准容器和boost::assign执行类似的操作


std::vector vect = list_of(3)(4)(2)(6);

...

vect = list_of(2)(7)(3)(8);

在堆上这样做是一项要求吗?你在问题中没有提到。我只是想找到一种方法,可以将相同的指针更新到新数组,但是数组需要初始化。所以我认为它必须在堆上完成,但无论如何,这样做会让我很高兴。这里更大的图景是什么?我正在编写一个函数,其中有32个数组,基本上相同的4个数组,但有不同的成员。我想以某种方式将其保留为4个数组,并在函数中的8个不同点重新初始化它们。您可以通过使用所需的新数字覆盖它们来重新使用这四个数组。您所说的“覆盖它们”是什么意思?注释后的建议会起作用,但在整个函数期间不会占用大量内存?我希望把它展开,这样记忆的足迹会更低。但这是目前为止最好的解决方案几乎在任何情况下,从堆栈中保留32*4*4字节是完全可以接受的。这种方法的问题是*指针只能在这个作用域中使用,因为它指向一个堆栈变量,一旦作用域退出就会从堆栈中删除。使用它之前,确保指针指向有效数据是很明显的,不是吗?一个指针可以指向“相同的4个数组,但成员不同”中的任意一个(如Alex所需)。
void func()
{
    int *pointer = new int[4];
    ...
    memcpy(pointer, ar1, sizeof(ar1));
    ...
    memcpy(pointer, ar2, sizeof(ar2));
    ...

std::vector vect = list_of(3)(4)(2)(6);

...

vect = list_of(2)(7)(3)(8);