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);