2010-03-26 4 views
1

배열을 초기화 한 다음 해당 배열에 대한 포인터를 초기화하고 싶습니다.동일한 배열에 대한 포인터를 초기화하기 전에 배열 초기화

int *pointer; 
pointer = new int[4] = {3,4,2,6}; 
delete[] pointer; 
pointer = new int[4] = {2,7,3,8}; 
delete[] pointer; 

어떻게하면됩니까?

+2

힙에서 요구 사항이 필요합니까? 당신은 당신의 질문에 언급하지 않았습니다. –

+0

글쎄, 난 그냥 새로운 배열에 동일한 포인터를 업데이트 할 수있는 방법을 원하지만, 배열을 초기화해야합니다. 그래서 나는 그것이 힙에서 수행되어야한다고 생각하지만, 어쨌든 그 작품들은 나를 행복하게 할 것입니다. – Alex

+0

큰 그림은 무엇입니까? – GManNickG

답변

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

글쎄, 기본적으로 동일한 4 개의 배열이지만 다른 멤버와 함께 32 개의 배열을 가지는 함수를 작성하고 있습니다. 나는 어떻게 든 그것을 4 개의 배열로 유지하고 함수의 8 개의 다른 점에서 다시 초기화하기를 원했습니다. – Alex

+0

네 개의 배열을 새 숫자로 덮어 씀으로써 재사용 할 수 있습니다. – sbi

+0

"덮어 쓰기"란 무엇을 의미합니까? – Alex

1
int *pointer = new int[4]{3,4,2,6}; 

편집 :으로는 코멘트에 지적이 C + +0 구문입니다. 이전 버전에서 이렇게하려면 스택 배열 + 크기를 취하고 힙에 새 배열을 할당하고 힙 배열을 채우는 스택 배열을 반복 한 다음 힙 배열에 대한 포인터를 반환하는 함수를 작성합니다.

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

이 두 줄이 필요하지만 적어도 라인으로 라인을 초기화하는 것보다 쉽습니다.

+5

이것은 C++ 0x 구문입니다. –

+0

g ++ 컴파일러에서이 기능이 작동하지 않는 것 같습니다. – Alex

+0

그래, 나쁘다. 나는 이것이 C++ 0x 이전에 작동 할 것이라고 생각했다. –

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

이 접근법의 문제점은 * 범위가 끝나면 스택에서 제거 될 스택 변수를 가리키기 때문에 * 포인터 만이 범위에서 사용될 수 있다는 것입니다. –

+0

사용하기 전에 포인터가 유효한 데이터를 가리키는 지 확인하는 것이 분명합니다. 하나는 '동일한 4 개의 배열이지만 다른 구성원이있는'(Alex가 필요로하는 것처럼) 포인터 중 하나를 가리킬 수 있습니다. –

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

당신은 할 수있다 표준 컨테이너와 boost :: assign을 가지고 이와 같은 것을 만들 수 있습니다.


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

... 

vect = list_of(2)(7)(3)(8); 
관련 문제