我想初始化一个数组,然后初始化一个指向该数组的指针。
int *pointer;
pointer = new int[4] = {3,4,2,6};
delete[] pointer;
pointer = new int[4] = {2,7,3,8};
delete[] pointer;
我该怎么做?
答案 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);