배열을 초기화 한 다음 해당 배열에 대한 포인터를 초기화하고 싶습니다.동일한 배열에 대한 포인터를 초기화하기 전에 배열 초기화
int *pointer;
pointer = new int[4] = {3,4,2,6};
delete[] pointer;
pointer = new int[4] = {2,7,3,8};
delete[] pointer;
어떻게하면됩니까?
배열을 초기화 한 다음 해당 배열에 대한 포인터를 초기화하고 싶습니다.동일한 배열에 대한 포인터를 초기화하기 전에 배열 초기화
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 *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);
이 두 줄이 필요하지만 적어도 라인으로 라인을 초기화하는 것보다 쉽습니다.
이것은 C++ 0x 구문입니다. –
g ++ 컴파일러에서이 기능이 작동하지 않는 것 같습니다. – Alex
그래, 나쁘다. 나는 이것이 C++ 0x 이전에 작동 할 것이라고 생각했다. –
//initialize the array
int array[] = {3,4,2,6};
// initialize a pointer to that array
int *pointer = array;
이 접근법의 문제점은 * 범위가 끝나면 스택에서 제거 될 스택 변수를 가리키기 때문에 * 포인터 만이 범위에서 사용될 수 있다는 것입니다. –
사용하기 전에 포인터가 유효한 데이터를 가리키는 지 확인하는 것이 분명합니다. 하나는 '동일한 4 개의 배열이지만 다른 구성원이있는'(Alex가 필요로하는 것처럼) 포인터 중 하나를 가리킬 수 있습니다. –
다른 사람들이 지적했듯이이 아닌 힙 배열을 초기화 할 수 있습니다, 예를 들면 :
는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);
힙에서 요구 사항이 필요합니까? 당신은 당신의 질문에 언급하지 않았습니다. –
글쎄, 난 그냥 새로운 배열에 동일한 포인터를 업데이트 할 수있는 방법을 원하지만, 배열을 초기화해야합니다. 그래서 나는 그것이 힙에서 수행되어야한다고 생각하지만, 어쨌든 그 작품들은 나를 행복하게 할 것입니다. – Alex
큰 그림은 무엇입니까? – GManNickG