2011-04-07 6 views
1

다른 배열에 대한 포인터를 포함하는 배열을 만들면 어떻게 전체 배열이 가리키는 배열에 액세스 할 수 있습니까? 나는 그것을 새로운 배열을 추가 할 수 있도록다른 포인터에 대한 포인터 배열 만들기

또한
#include <iostream> 

using namespace std; 

int main (void) 
{ 

bool (*arrays)[3], *arr1, *arr2, *arr3, *tempArr; 

arr1 = new bool[2]; 
arr2 = new bool[2]; 
arr3 = new bool[2]; 

arr1[0] = arr2[0] = arr3[0] = 0; 
arr1[1] = arr2[1] = arr3[1] = 1; 

arrays[0] = arr1; 
arrays[1] = arr2; 
arrays[2] = arr3; 

int n = 0; 

while (n <= 2) { 

    tempArr = arrays[n]; 

    cout << tempArr[0] << tempArr[1] << "\n"; 
} 
} 

, 어떻게 내가 ("배열") 포인터 전체 배열을 만들 것입니다 :이 시도? 나는 예비 기능을 만들었지 만, 그것은 (주 "경로"전체 배열이) 작동하지 않습니다 희망이 혼란스럽고 터무니에없는

void addPath (void) 
{ 

int n = getArrayLength(paths), i = 0; 
bool (*newPaths)[n + 1]; 

while (i < n) { 

    newPaths[i] = paths[i]; 

    ++i; 
} 

delete [] paths; 

newPaths[n] = tempPath; 

paths = newPaths; 
} 

을, 당신의 도움을 주셔서 감사합니다. std::vector<bool>이 정상 "용기"가 아니라고하지만,

#include <vector> 

std::vector<std::vector<bool> > paths; 

참고하고, vector<any_type_other_than_bool> 같은 일반 컨테이너의 모든 작업을 지원하지 않습니다

+1

"C++ 포인터 배열"을 검색 할 때 나타나는 수십 가지 질문 중 중복되는 항목이있을 수 있습니다. –

답변

1

당신이 std::vector 찾고있는 것으로 보인다 할 것이다.

0

malloc을 사용할 수 있습니다. 물론 C 코드가 아닌 C 코드입니다.

#include <cstring> 
#include <cstdlib> 

size_t ptrArraySize = 3; 
bool** arrays = (bool**) malloc(ptrArraySize * sizeof(bool*)); 

또는 Jerry Coffin이 제안한대로 할 수 있습니다. 그러나 이것은 벡터에 대한 포인터가있는 벡터를 제공하지 않습니다. 이것은 벡 터 벡터를 제공합니다 (스택은 힙이 아닌 할당 됨). 필요에 따라 boost::scoped_array 또는 boost::shared_array 중 하나를 사용

#include <vector> 

std::vector<std::vector<bool> * > ptrVector; 
std::vector<bool> * vectorA = new std::vector<bool>(); 
vectorA->push_back(true); 
ptrVector.push_back(vectorA); 

또 다른 가능성 : 벡터에 대한 포인터의 벡터를 얻으려면, 당신은 뭔가를 할 수 있습니다.

0

bool (*arrays)[3]은 3 개의 bool 배열에 대한 포인터로 지정합니다. bool에 3 개의 포인터 배열이 필요합니다 (bool *arrays[3]). 포인터를 동적으로 만들려면 bool **arrays = new bool*[3];

관련 문제