2012-11-26 2 views
0

가능한 중복 : 인덱싱 요소

int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}}; 

가 무엇에 대한 답 [것이다 : 다음 코드에

How do I use arrays in C++?

i], a [i] [j], 여기서 i < = 1 및 j < = 2 나는 prob가 없습니다 a. [i] [j] [k] 작업을 이해하는 데 도움이됩니다. 위의 색인 생성은 어떻게 작동합니까?

+0

저는 희망합니다 [this] (http://stackoverflow.com/questions/4810664/how -do-i-use-arrays-in-c)가 도움이됩니다. –

+0

@PaperBirdMaster 아닙니다. 나는 아직도 [1] -a [0] = 3과 같은 방법을 이해할 수 없다. 그러나 당신이 링크 한 기사는 훌륭하다. 감사 인사 –

+0

'a [i]'는'int **''a [i] [j ]''int *'타입이고'a [i] [j] [k]'는'int' 타입이므로 모두 3 가지가 다를 수 있습니다 – Omkant

답변

1

여기서 기억해야 할 점은 작업하고있는 두 개의 다른 개체가 있다는 것입니다.

a[i][j][k] 

a[i][j], a[i] and a 

첫 번째는 int이며 다른 3 포인터

연결된 메모리의 모양이 같다 : 등등

a  : | a[0] | a[1]| 
      \/  \______________________ 
a[]  : | a[0][0] | a[0][1] | a[0][2] | a[1][0] | a[1][1] | a[1][2] | 
      \/   \______________ 
a[][] : | a[0][0][0] | a[0][0][1] | a[0][1][0] | a[0][1][1] | ... 

그리고를 ...

이제 예제에서는 포인터로 arithmic 연산을 수행합니다. a[1] - a[0] = 3. 당신이 볼 수있는 기억과 관련된 기억을 보면 2 개의 포인터 사이에 3 개의 메모리 위치가 있으므로 결과는 3입니다.

+0

아주 잘 설명했다. 나중에 3 양식 포인터입니다. 그게 도움이 이해, 많이 고마워 :) –

1

a [i]와 a [i] [j]는 주소이며, int a[2][3][2]={{{1,2},{9,8},{3,7}},{{2,2},{1,4},{5,4}}};에 지정된 값과는 아무런 관련이 없습니다. 즉 a [1] -a [0]은 a가 가리키는 두 번째 배열과 첫 번째 배열 사이의 바이트 수입니다.

+0

"첫 번째 배열이 가리키는 두 번째 배열 사이의 바이트 수"가 의미하는 바를 이해할 수 없습니다. 어떻게 설명 할 수 있습니까? a [i] -a [0] = 3 및 a [1] [0] -a [0] [0] = 3 코드에서? –

+0

바이트 수는 아니며 메모리 위치의 수입니다. 3 정수 사이에 12 바이트가 있습니다. – Minion91

+0

지금 알았습니다. 감사합니다 –

1
a[0] = {{1,2},{9,8},{3,7}} 
a[1] = {{2,2},{1,4},{5,4}} 

a[0][0] = {1,2},     a[0][1] = {9,8},    a[0][2] = {3,7} 
a[0][0][0] = 1, a[0][0][1] = 2, a[0][1][0] = 9, a[0][1][1] = 8, a[0][2][0] = 3, a[0][2][1] = 7 

a[1][0] = {2,2},     a[1][1] = {1,4},    a[1][2] = {5,4} 
a[1][0][0] = 2, a[1][0][1] = 2, a[1][1][0] = 1, a[1][1][1] = 4, a[1][2][0] = 5, a[1][2][0] = 4 
3

나는 당신의 문제가 무엇인지 완전히 잘 모르겠지만, 나는 당신에 색인 설명하려고합니다 :

은 당신이 당신의 예에서 만든 것은 세 가지 차원 배열 (또는 중첩 배열 당신의 경우를 의지).

나는 당신이 x는 선택 배열의 ​​어느 위치를 결정합니다 a[x]를 요청할 때 당신은 이제 다음

  ---x--- 
int a[3] = {1, 2, 3}; 

같은 간단한 배열을 이해하고 확신합니다. 는 Y가 선택된 두 일차원 배열을 결정한다 b[y][x]를 요청하고, X는 당신이 배열 된 위치를 지시하는 경우

이차원 배열은 단지 어레이

   ---------y-------- 
       ---x--- ---x--- 
int b[2][3] = {{1, 2, 3}, {4, 5, 6}}; 

의 배열이다.

3 개 차원 배열 만이 한 레벨 높은 복용 : 배열

    ----------------------z-------------------- 
        ---------y---------  ---------y--------- 
        ---x--- ---x---  ---x--- ---x---- 
int c[2][2][3] = {{{1, 2, 3}, {4, 5, 6}}, {{1, 2, 3}, {4, 5, 6}} }; 

의 배열의 배열 지금 c[z][y][x]에 대한 요청은 y 번째에이어서, i 번째 차원 어레이로 진행 그 2 차원 배열의 1 차원 배열, 그리고 나서이 배열의 x 번째 위치에 저장됩니다.

c[z] 또는 c[z][y]에 대한 요청은 배열의 주소를 가져오고 실제 int 값을 산출하지 않습니다.