2011-10-05 6 views
2

이 루프 고려해순서 배열 인덱스 작업

int[] myArray = new int[10]; 

int myIndex = 0; 
for (int i = 0; i < 10; i++) 
{ 
    myArray[myIndex++] = myIndex; 
    Console.WriteLine(myArray[i]); 
} 

이 수율 : myIndex 포스트 증가하므로

1 
2 
3 
... 

을, 우측이 먼저 평가되고, 안 배열 인덱스 0에 0이 포함되어 있습니까?

나를 위해이 작전 명령 오해를 설명 할 수 있습니까?

+1

와우 ...에 equivalend입니다! 나는 또한 충격을 받았다. 이 C++ 동일합니까? –

답변

5

오른쪽이 반드시 먼저 평가되는 것은 아닙니다. 유사에 : 위의 코드에서

foo.Bar.Baz = a + b; 

, foo.Bar 다음 set_Baz 방법은 오른쪽에 평가 무엇에 바즈 속성을 설정하기 위해 호출됩니다, 먼저 a + b을 평가한다. 당신이 조각으로 그것을 깰 경우 코드에 따라서

은, 그것은 다음과 같습니다 : 배열 인덱스가 precident이 걸리기 때문에

var index = i; 
// post-incremented in the original code means this comes after the line above, 
// but not after the line below it. 
i += 1; 
myArray[index] = i; 
0
값이 설정되고 전에 myIndex는 ++ 실행

가 어떤 배열 인덱스를 알 수 있도록 값을로 설정합니다.

0

myIndex++이 우선 순위에있어서, 좌측 및 마지막 할당 연산자 다음에, 먼저 평가

2

개봉 :

myArray[myIndex++] = myIndex; 
      *   * 
      |   | 
     zero   one 

myIndex++myArray[myIndex++] 후에 실행 얻는다 그러나 어떠한 후속 호출이 이미 증분 된 변수.

0

그 ...

myArray[myIndex++] = myIndex; 

은 ...

int tmp = myIndex; 
++myIndex; 
myArray[tmp] = myIndex;