void main(){
int a=4;
printf("%d %d %d %d\n", a++, a, ++a,a++);
}
출력결과 6 7 7 4
제가 아는 건 호출규약때문에 printf()의 인자를 거꾸로 읽는 건 아는데 그 이상은 모르겠네요.
자세한 설명 부탁드립니다.
-----------------------------------------------------------------------------------------
[1] printf문에 나오는 인자들은 뒤에서 부터 연산결과를 구합니다.
[2] a++ 형식으로 된 변수의 값은 그 시점의 값을 따로 저장해 두었다가
출력을 해 줍니다.
[3] ++a 와 a는 a의 변수의 출력시점의 값 자체를 출력해 줍니다.
------------------------------------------------------------
위의 세가지 원칙을 가지고 값이 나오는 것을 보겠습니다.
printf("%d %d %d %d\n", (1) a++, (2) a, (3) ++a, (4) a++);
[1] 번에 따라서 (4)번 부터 연산 결과를 구합니다. a가 원래 가지고 있던 값인 4가 그 결과입니다.
그리고 나서 a의 값은 5가 됩니다. [[4를 따로 보관해 둡니다.]]
[1] 번에 따라서 (3)의 값을 구합니다. a는 6이 됩니다. [3] 번에 따라서 나중에 출력할 때의 a의 값을
출력하게 됩니다.
[1] 번에 따라서 (2)의 값을 구합니다. a는 6입니다. [3] 번에 따라서 나중에 출력할 때의 a의 값을
출력하게 됩니다.
[1] 번에 따라서 (1)의 값을 구합니다. a가 현재 가지고 있는 값인 6을 따로 저장합니다.
그리고 나서 a는 7이 됩니다.
=========================================================================
자 이제 출력을 합니다.
(1) 은 6입니다.
(2)는 출력시점의 a의 값이 7을 출력합니다.
(3) 도 출력시점의 a의 값인 7을 출력합니다.
(4) 는 4를 출력합니다.
*************************************************************************
이렇게 해서 6 7 7 4 가 출력이 됩니다.
컴파일러에 따라서 조금 다를 수 있지만 위에서 이야기한 3가지 방식대로
동작하는 경우가 많기에 이렇게 풀어 봅니다. 그러니까 이해가 되지 않습니까?
'c·c++ > c 프로그래밍' 카테고리의 다른 글
파일에서 읽어서 단순 연결리스트 만들기 (0) | 2012.09.16 |
---|---|
eigenvalue for 3x3 matrix (0) | 2012.08.29 |
4칙 연산 - 간단한 계산기 (0) | 2012.08.23 |
4원 1차 연립방정식 - 2개의 식 (0) | 2012.08.23 |
가상 키보드 입력 (0) | 2012.08.23 |