#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a = 0;
a++; // a = a + 1 or a += 1;
printf("%d\n", a);
++a; // a = a + 1 or a += 1;
printf("%d\n", a);
double b = 0;
b++;
printf("%f\n", b);
++b;
printf("%f\n", b);
return 0;
}
1, 2, 1.0000, 2.0000 출력된다.
while (count++ <10)
{
printf("%d", count);
}
count 앞에 ++
이 붙는 것이랑 뒤에 ++
이 붙는 것은 다르다.
앞에 ++
이 있으면 1 부터 9까지 출력이 된다.
하지만 뒤에 ++
가 위치하게 되면, 현재상태에서 10과 비교를 한 후에 숫자가 하나 증가한다.
int i = 1, j = 1;
int i_post, pre_j;
i_post = i++;
pre_j = ++j;
printf("%d %d\n", i, j);
printf("%d %d\n", i_post, pre_j);
이 경우 i_post
를 제외하고는 2가 출력되지만, i_post
는 1이 출력된다. 왜냐하면 i_post
에 1이 대입이 되고난 후, ++
가 실행되어 값이 하나 증가하는 것이다.
즉, 증가하기 전의 값이 출력이 되면서 1이 출력되는 것이다.
int i = 3;
int l = 2 * --i;
printf("%d %d\n", i, l);
i = 1;
l = 2 * i--;
printf("%d %d\n", i, l);
이 경우
2 4 0 2
가 순서대로 출력되는데, 마지막 줄의 l
은 2 * 1
이 되고 나서 i가 1만큼 줄어들었으므로 0 2
가 출력된다.
/* very high precedence */
int x, y, z;
x = 3, y = 4;
z = (x + y++) * 5; // (x + y)++ or ++(x + y)
printf("%d %d %d", x, y, z);
이 경우도 7 * 5
가 된 후, y가 1만큼 늘어난다.
즉, 3 5 35
가 출력된다.
++
나 --
와 같은 연산자들은 상수에는 붙일 수 없고, 수정가능한 l-value
가 아닌 곳에 (x+y)++
와 같이 쓸 수 없다. int n = 1;
printf("%d %d", n, n * n++);
int x = n / 2 + 5 * (1 + n++);
int y = n++ + n++;