프로그래밍

 3198, 1/160 회원가입  로그인  
   free9960
   c언어 질문입니다. 초보(연산자)

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=2843 [복사]


#include <stdio.h>

int main(void)
{
        int val1=10;
        int val2=(val1--)+2;

        printf("val1 : %d\n", val1);
        printf("val2 : %d\n", val2);


}


이렇게 해서 결과값을 봣는데 .

val1 은 9 val2는 12가 나오는데 이해가 가지를 않습니다. ㅠㅠ 책을봐도..

열혈강의 c 보고 잇습니다.

  Hit : 4559     Date : 2011/01/07 04:47



    
blueh4g (val1--;) == (val1=val1-1;)
(--val1;) == (val1=val1-1;)

그렇다면 (val1--;) 와 (--val1;) 의 차이점은 무엇일까요?

깨달으면 질문에 대한 답도 아실수 있을듯..
2011/01/07  
Myers -- 연산자는 변수명 뒤에 오면, 선 연산 후 감소; 변수명 앞에 오면, 선 감소 후 연산이 됩니다. 고로,

int val1=10;
int val2=(val1--)+2;

val1이 10으로 선언된 후, val2 에서는 (val1을 선 연산 후 감소)+2 가 되어있습니다. 그러므로 대입연산자인 ' = ' 의 기능을 val2를 초기화 시키는데 먼저 연산이 될 것 이고, 그 후에 val1의 값이 1 줄어들어 9로 초기화 될 것입니다. ( val2를 초기화하는 과정이 끝나고 val1의 값은 1 감소합니다. )
그래서, printf 함수를 이용하여 val1을 출력하면 9, val2는 val1이 감소 되기 전에 = 연산자에 의하여 val1의 원래 값인 10과 2를 더한 값으로 초기화 되었기에 12 가 나옵니다.
2011/01/07