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

时间:2010-03-26 20:00:38

标签: 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;

我该怎么做?

5 个答案:

答案 0 :(得分:2)

为什么不使用

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

答案 1 :(得分:1)

int *pointer = new int[4]{3,4,2,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;
}

电话会是这样的:

int a[] = { 1, 2, 3, 4 };
int *ptr = foo( 4, a );

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

答案 2 :(得分:0)

//initialize the array
int array[] = {3,4,2,6};
// initialize a pointer to that array
int *pointer = array;

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您可以使用标准容器和boost :: assign来执行此类操作。


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

...

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