이 쉬운 질문에 대해 유감스럽게 생각하지만 답변을 찾지 못했습니다. while 루프는 이렇게 생겼습니다. 비교 전후에 계산합니까?while 루프 ++ 변수
a = 0;
while(a++ < 5)
{
....
처음은 "1 < 5"또는 "0 < 5"로 볼 것이다 루프를 실행합니다. 감사합니다
이 쉬운 질문에 대해 유감스럽게 생각하지만 답변을 찾지 못했습니다. while 루프는 이렇게 생겼습니다. 비교 전후에 계산합니까?while 루프 ++ 변수
a = 0;
while(a++ < 5)
{
....
처음은 "1 < 5"또는 "0 < 5"로 볼 것이다 루프를 실행합니다. 감사합니다
비교 전에 증가를 을 수행하지만, 루프의 몸은 icrementation 후에 값 을 본다. 따라서 첫 번째 실행에서는 0 <을 5와 비교하지만 루프 a의 값은 1입니다.
++ a? 비교 이전에 증가가 있었습니까? – Fjodor
@Fjodor : 예 - 그러면 비교 전에 실행되므로 1 <5가됩니다. –
후위 연산자는 "이후"에 적용됩니다. 접두사 연산자는 "before"에 적용됩니다. 처음으로 'a'값을 비교 한 값을 제공 한 경우 값은 0과 같습니다.
주의해서 사용하지 않으면 이러한 연산자에 문제가 발생할 수 있으므로주의하십시오. [ix ++] = a [ix] + 1; 어쩌면 그것은 당신이 원하는 것을 할 것입니다, 어쩌면 ... 시도해보십시오
그냥 다른 의견을 읽으십시오 ... ++ 값을 취할 것입니다. insde 루프.
"작동 여부"에 관계없이 'a [ix ++] = a [ix] + 1'은 * 정의되지 않은 행동 *, 악마가 코에서 날아갈 수도 있습니다. –
코 악마에 대한 느낌에 따라 원하는 것은 아닐 수도 있습니다 .-D – Dweeberly
표현식 a++
의 결과는 a
의 현재 값이므로 루프는 while (0 < 5)
으로 시작합니다.
표현식 ++a
의 결과는 a + 1
이므로, while (++a < 5)
이라고 쓰면 while (1 < 5)
으로 시작합니다.
두 경우 모두 a
은 부작용으로 1 씩 증가합니다. 표현식을 평가 한 직후에 부작용을 적용 할 필요는 없습니다. 유일한 보장은 다음 시퀀스 포인트 전에 적용된다는 것입니다 (이 특별한 경우에는 시퀀스 포인트가 조건식의 끝에 있기 때문에 루프 본문에 업데이트 된 값 a
이 표시됨). 그래서 당신은
x = a++ * ++b;
같은 표현이있는 경우, 그것은 가 x = a * (b + 1)
으로 평가 수 있지만 a
평가 된 ++b
전에 증가 할 것이라는 보장은 없다, 나 하나가되기 전에 증가합니다 어떤 보장이 곱셈과 배정.
t1 <- b + 1
x <- a * t1
b <- b + 1
a <- a + 1
'0 <5' ......... – BLUEPIXY
다음은 많은 동작 적으로 허용 가능한 순서 중 하나이다 왜 그것을 시험해 보지 그래? 'printf ('% d', a);'를 반복하고 무슨 일이 일어나는 지보십시오. –
@MarcB : 인쇄 결과가 결정적이지 않고 직관적이지 않기 때문에? – njzk2