2014-09-10 2 views
0

저는 약간의 C++ 초보자이며 프로젝트를 진행하고 있습니다. 조금 갇혀 있습니다. 동적 인 2D 비정형 배열을 만들고 포인터를 가리켜 야합니다.2D 동적 배열에 대한 C++ 포인터?

int ** x = new int*[3]; 
int *** y = ???; 

을 이제 내가 할 후 : I가 원하는 것은

int num = x[i][j]; 

:

x[n] = new int[length]; 
x[++n] = new int[length2]; 
//etc etc 

내가 좋아하는 성명을 통해 배열의 값에 액세스 할 수 있습니다 여기에 내가 무엇을 가지고 y를 통해 같은 배열 값을 가질 수 있습니다.

int num2 = *y[i][j]; 

그래서이 경우 num2와 num은 같은 값을 가져야합니다. 어떻게 y에 메모리를 할당하고 할당할까요?

감사합니다.

+3

"C++ 초보자"로서, 자신에게 호의적으로 말하며 '새'라는 말, 심지어 '새로운'배열 형태에 대해서 들어 본 적이 있다는 것을 잊지 마십시오. 불규칙한 2D 배열의 경우'std :: vector >'을 사용하십시오. –

+0

프로젝트는 클래스 용이며 설계 사양은 벡터를 사용하지 않는다는 것을 나타냅니다. – reconrey

+0

그런 다음 선생님을 해고하고 자신이하는 일에 대한 단서를 가진 사람을 찾으십시오. 너무 무뚝뚝 서서 미안하지만, 이것은 그의 입장에서 완전히 용서 할 수없는 행동입니다. –

답변

0

다음은 C++로 2D 배열을 만드는 예제입니다.

#include <iostream> 

int main() { 
    // dimensions 
    int N = 3; 
    int M = 3; 

    // dynamic allocation 
    int** ary = new int*[N]; 
    for(int i = 0; i < N; ++i) 
     ary[i] = new int[M]; 

    // fill 
    for(int i = 0; i < N; ++i) 
    for(int j = 0; j < M; ++j) 
     ary[i][j] = i; 

    // print 
    for(int i = 0; i < N; ++i) 
    for(int j = 0; j < M; ++j) 
     std::cout << ary[i][j] << "\n"; 

    // free 
    for(int i = 0; i < N; ++i) 
    delete(ary[i]); 
    delete [] ary; 

    return 0; 
} 

// OUTPUT 
0 
0 
0 
1 
1 
1 
2 
2 
2 

this 응답을 확인하십시오.

이제 2D 배열을 만들었습니다. 포인터를 가리 키기 만하면됩니다. 메모리를 다시 할당 할 필요가 없습니다 (잘못된 것입니다)!

그래서, 당신은 단지 같은 것을 할 필요가 :

int ***p = &ary; 

    // print 
    for(int i = 0; i < N; ++i) 
    for(int j = 0; j < M; ++j) 
     std::cout << (*p)[i][j] << "\n"; 

...하지만 기다려, 그것은 C입니다 ++! 기본 배열 대신 std :: array 또는 std :: vector를 사용해야합니다 (std :: vector < std :: vector>와 같이 2D 용으로 확장).

0

X에 대한 포인터는 다음과 같습니다 y를위한 공간을 할당 할 필요가 없습니다

int *** y = &x; 

.

+0

y가 x를 가리키고 있지 않습니까? 나는 x가 가리키는 포인터를 가리키는 포인터를 가리키고 싶다. – reconrey

+0

http://www.cplusplus.com/doc/tutorial/pointers/ – Carl