2011-10-16 3 views
0

이 간단한 코드 세그먼트를 내게 설명 할 수 있습니까?이 산술 표현식이 왜이 결과를 생성합니까?

int i=7; 
int j=3*i-- + 2; 
printf("%d %d",i,j) 

컴파일 할 때 나는 6,23이됩니다.

는 어떻게 23 오는가? 나는 3 * 7 = 21이 20으로 감소하고 2가 23이 아니라 23이 될 것이라고 생각했다.

답변

3
int i = 7; /* i is 7 */ 
int j = (3 * (i--)) /* means 3 * 7 */ + 2; /* 3 * 7 + 2 = 23 */ 
/* i is now 6, because it was decreased by the postfix -- operator */ 
printf("%d %d", i /* 6 */, j /* 23 */); 
2

i-- 1 씩 i를 감소시키는 부작용 (6으로 설정)을 가지고 있지만, 표현식 i이전 값을 산출한다. --ii을 감소하고 새로운 결과를 얻을 것입니다.

1

--i이 아니라 3*i에 결합합니다. (3*i--이 필요 좌변 아니므로 당신은 어떤 경우에 (3*i)--이 없습니다.)가 감소되기 전에 i--의 값은 i의 원래 값입니다. C에서 단항 연산자의

관련 문제