인프런 커뮤니티 질문&답변

aaa164949님의 프로필 이미지
aaa164949

작성한 질문수

홍정모의 따라하며 배우는 C언어

5.8 증가, 감소 연산자

10분 쯤에 질문이요

작성

·

190

0

26번째 줄에 i와j에 1을 대입 했는데 왜 32번째 줄에 출력한게 2가 나오죠? 증가 연산자를 i_post와 pre_j에 대해서 사용하였는데 i와j의 값 까지 변하나요?

예를 들면

int i=a, j=a;

int i_post, pre_j;

i_post= a+1 ; //i++ = i+1

pre_j = a+1;    //++j = j+1

그러면 i의 값은 a+1 인건가요?

답변 2

4

증가 연산자는  i_post와 pre_j 가 아닌 i 와 j 에 대해서 사용한 것입니다. 따라서 i 와 j 의 값은 변합니다. i_post와 pre_j 는 각각 i++, ++j 의 결과를 대입 받았을 뿐입니다.

i_post = i++;

👉 이 의미는 1️⃣ i_post 에 기존의 i 값을 전달한다. 2️⃣ 그리고나서야! i 의 값을 1 증가시켜 변화시킨다.  입니다. 대입에 있어 증가시키기 전의 기존 값을 먼저 전달하고 1 증가 시키는 행위를 나중에 합니다.

pre_j = ++j;

👉 이 의미는 1️⃣ j 의 값을 먼저 증가시킨다. 2️⃣ 1 증가되어 변화된 이 j 값을 pre_j 에 전달한다. 입니다. j = j + 1 증가 처리를 먼저 하고나서야 pre_j 에 전달합니다. 

i = 2;

printf("%d", i++);

위와 같은 코드가 있다면 2 가 출력될 것입니다. 왜냐면 1️⃣ printf 매개 변수에 기존의 i 값을 먼저 전달하고 2️⃣ 그리고나서야 i 의 값을 1 증가시켰기 때문입니다. 즉, printf 문이 끝난 후 i 값은 3 이 되었지만 i가 증가되기 전에 pritnf 에게 전달 되었으므로 2 가 출력되는 것입니다. 이렇게 후위 증가 연산자는 증가되는 처리가 해당 문장 ; 세미콜론이 끝난 후 처리된다고 생각하시면 이해가 쉬우실거에요!

i = 2;

printf("%d", ++i);

위와 같은 코드가 있다면 3 이 출력될 것입니다. 왜냐면 1️⃣ i 값을 먼저 1 증가시켜 3으로 변화된 i 값을 2️⃣ printf 매개 변수에 먼저 증가 되어 3 으로 변화된 이 i 값을 넘겼ㄱ기 깨문입니다. 이 경우엔 증가를 먼저 시킨 후 printf 에 전달햇기 때문에 결과는 i도 3이되고 출력도 3 이 출력하게 됩니다.

따라서 결론적으로 강의의 코드에서 i는 i++ 연산을 통해 2 가 되었고, j 는 ++j 연산을 통해 2 가 되었기 때문에 2 2 가 출력된 것입니다. i_post 에는 i가 1 증가되기 전의 값인 1 을 대입 받았고, pre_j 에는 j 를 1 증가시킨 후의 값인 2 를 대입받았구요!

(덧붙여서 질문자님의 코드에서는 i의 값은 a+1 이 되지 않습니다 i는 첫 줄에서 a 를 한번 대입 받은 그 이후로는 어떠한 연산이나 대입도 하지 않았기 때문입니다. i와 a는 별개의 변수이기 때문이에요. i는 a의 초기값을 복사받았을 뿐입니다! 질문자님 코드대로라면 a가 만약 2 였다면 i 와 j 는 2, i_post와 pre_j는 3 이 되었겠네요!)

0

aaa164949님의 프로필 이미지
aaa164949
질문자

감사합니다!

aaa164949님의 프로필 이미지
aaa164949

작성한 질문수

질문하기