2008-12-07 5 views
1

를 통해 bidimensional (또는 삼차원) 배열에 액세스?포인터

*bar == foo[0][0][0]; 
*(bar+1) == foo[0][0][1]; 
*(bar+2) == foo[0][1][0]; 
*(bar+3) == foo[0][1][1]; 
*(bar+4) == foo[1][0][0]; 

잘 모르겠으며 그 코드가 작동하는지에 대한 의존성이 있습니다.

+0

참고 : 나는 그것을 비교하고 싶지 않습니다. 단지 그것이 동일한 지 알고 싶습니다. – fmsf

답변

4

네, 그게 row major ordering이고, C가 사용하고있는 것입니다.

+0

기본적으로 그 비교는 실제로 사실 일 것이지만 엄밀히 말하면 유형이 int [2] 인 배열의 요소에서 포인터를 얻었 기 때문에 정의되지 않은 동작입니다. 그 다음 2보다 큰 수를 추가하면 정의되지 않은 동작이됩니다 (이론적으로 만 항상 현실에서 작동합니다). –

0

대부분의 시스템에서 그렇습니다.

+0

반례가 있습니까? – ysth

+0

아니면 반대 예제가 아니라면 표준에서 레이아웃 규칙이 실제로 다차원 배열에 대해 나타내는 것을 나타내는 무언가입니다. –