안녕하세요 저번 답변에서
먼저 알아두실 것은 C언어에서는
1. 전치 후치 연산을 할 때, 해당 식에 사용되는 모든 전치연산자가 식 수행 전에 전부 연산되고, 해당 식이 종료된 이후 모든 후치연산자가 연산됩니다.
2. 전치/후치 연산자가 하나의 '식'을 기준으로 식 앞/뒤에서 계산이 이루어진다는 것을 기억하세요.
라고 답변을 받았습니다.
그리고 저에게는 p 66에서 다시 한번 의문점이 발생했습니다.
시나공 유튜브로 400631, 교재 p66 표로 2번째에 있는
int a, hap = 0;
for (a = 0; a < 5; a++, hap += a);
라는 코드 부분에서 인강을 들어보니
후치 연산 a++ 뒤 hap += a에서 처음에 a를 초기값 0이 아닌 1로 연산한다고 말씀하셨습니다.
그 이유는
순서연산자 , 이므로 a++과 hap += a가 각각 다른 식으로 간주하기때문에 각자 연산된건가요?
[추가 질의 내용]
p 66 표 세번째에 있는
int a =1, hap = 0;
for(; a <= 5; a++)
hap += a;
에서 유튜브 인강으로는 처음에 a는 1로, hap은 0으로 처음 연산을 수행하셨는데
여기서 후치연산 a++로 인해 처음에 a가 2로 연산되지 않는 이유가 무엇일까요
저는 for(; a <= 5; a++)과 hap +=a는 각각 다른 식으로 간주되어 hap +=a에서 a는 2로 연산되어야 한다고 생각했습니다.
하지만 위의 for이하 코드는 같은 하나의 식인가요?
안녕하세요 길벗수험서 운영팀입니다.
예, 정확합니다.
해당 for문의 경우 수행순서가
a=0, a<5, 실행할 문장X, a++, hap +=a, a<5, 실행할 문장X, a++, hap +=a, a<5, .... 이렇게 되죠.
콤마(,)는 두 개 이상의 식을 연속으로 나열할 때 사용하는 연산자로 순서 연산자라고 부릅니다.
앞의 식이 종료된 후 다음 식을 수행하는 방식이죠.
[추가 질의]
for문의 식 수행 순서를 기억하세요. (66쪽 [for문의 동작 과정] 참고)
for문의 3개의 식은 서로 별개의 식입니다. (세미콜론(;)으로 구분되는 3개의 식이 포함된 조건문)
때문에 for문을 지나간다고 해도 해당 식을 수행하지 않으면 연산자는 실행되지 않습니다.
초기값 -> 조건식 -> 실행할 문장 -> 증가값 의 순서로 진행되는데, 해당 for문에서는 초기값이 존재하지 않으므로,
초기값x -> a<=5 -> hap+=a -> a++ -> a<=5 -> ... 이런 순서로 진행됩니다.
처음 hap+=a를 수행할 때에는 증가식(a++)이 수행된적이 없으므로 a가 증가해 있을 이유가 없게 되죠.
행복한 하루되세요 :)
-
관리자2020-06-30 10:23:40
안녕하세요 길벗수험서 운영팀입니다.
예, 정확합니다.
해당 for문의 경우 수행순서가
a=0, a<5, 실행할 문장X, a++, hap +=a, a<5, 실행할 문장X, a++, hap +=a, a<5, .... 이렇게 되죠.
콤마(,)는 두 개 이상의 식을 연속으로 나열할 때 사용하는 연산자로 순서 연산자라고 부릅니다.
앞의 식이 종료된 후 다음 식을 수행하는 방식이죠.
[추가 질의]
for문의 식 수행 순서를 기억하세요. (66쪽 [for문의 동작 과정] 참고)
for문의 3개의 식은 서로 별개의 식입니다. (세미콜론(;)으로 구분되는 3개의 식이 포함된 조건문)
때문에 for문을 지나간다고 해도 해당 식을 수행하지 않으면 연산자는 실행되지 않습니다.
초기값 -> 조건식 -> 실행할 문장 -> 증가값 의 순서로 진행되는데, 해당 for문에서는 초기값이 존재하지 않으므로,
초기값x -> a<=5 -> hap+=a -> a++ -> a<=5 -> ... 이런 순서로 진행됩니다.
처음 hap+=a를 수행할 때에는 증가식(a++)이 수행된적이 없으므로 a가 증가해 있을 이유가 없게 되죠.
행복한 하루되세요 :)