이 간단한 코드 세그먼트를 내게 설명 할 수 있습니까?이 산술 표현식이 왜이 결과를 생성합니까?
int i=7;
int j=3*i-- + 2;
printf("%d %d",i,j)
컴파일 할 때 나는 6,23
이됩니다.
는 어떻게 23 오는가? 나는 3 * 7 = 21이 20으로 감소하고 2가 23이 아니라 23이 될 것이라고 생각했다.
이 간단한 코드 세그먼트를 내게 설명 할 수 있습니까?이 산술 표현식이 왜이 결과를 생성합니까?
int i=7;
int j=3*i-- + 2;
printf("%d %d",i,j)
컴파일 할 때 나는 6,23
이됩니다.
는 어떻게 23 오는가? 나는 3 * 7 = 21이 20으로 감소하고 2가 23이 아니라 23이 될 것이라고 생각했다.
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 */);
i--
1 씩 i
를 감소시키는 부작용 (6으로 설정)을 가지고 있지만, 표현식 i
의 이전 값을 산출한다. --i
i
을 감소하고 새로운 결과를 얻을 것입니다.
--
은 i
이 아니라 3*i
에 결합합니다. (3*i
가 --
이 필요 좌변 아니므로 당신은 어떤 경우에 (3*i)--
이 없습니다.)가 감소되기 전에 i--
의 값은 i
의 원래 값입니다. C에서 단항 연산자의
목록 : http://en.wikipedia.org/wiki/Unary_operation#C_family_of_languages
--
는 단항 연산자이며 i
결합, 그래서 i--
하지 (3 * i)--
입니다.
는 후행 감소, 사용 감소시키는 전에 i
의 값이, 그래서 당신의 방정식은 단지이기 때문에 :
3 * 7 + 2
및 i
될 것 6.