Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어에서 ++i와 i++의 차이점은 무엇일까?

C 언어에서 ++-- 연산자는 각각 증가(increment) 연산자와 감소(decrement) 연산자라고 부릅니다. 이들은 하나의 피연산자만 필요로 하는 단항(unary) 연산자이며, 피연산자 앞에 붙느냐 뒤에 붙느냐에 따라 전위(prefix) 방식과 후위(postfix) 방식으로 나뉩니다.

단독으로 사용할 때는 결과가 같다

증감 연산자를 다른 연산 없이 단독으로 사용할 경우, i++++i는 결과적으로 동일하게 동작합니다.

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

위 코드와 아래 코드 모두 실행 결과는 같습니다.

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

두 경우 모두 i의 값은 6이 됩니다. 증가 자체는 동일하게 일어나기 때문입니다.

대입 연산자와 함께 사용할 때 차이가 발생한다

그러나 증감 연산식이 대입 연산자(=)와 함께 사용되면 연산자 우선순위(operator precedence)가 중요해집니다. 이때 전위와 후위의 동작 차이가 드러납니다.

후위 증가 연산자(i++)의 경우

i = 5;
j = i++;

후위 ++보다 대입 연산자 =의 우선순위가 높습니다. 따라서 i의 값이 먼저 j에 대입된 후에 i가 증가합니다. 결과적으로 j는 5, i는 6이 됩니다.

전위 증가 연산자(++i)의 경우

i = 5;
j = ++i;

반면 전위 ++는 대입 연산자 =보다 우선순위가 높습니다. 따라서 i가 먼저 증가한 후, 증가된 값이 j에 대입됩니다. 결과적으로 ij 모두 6이 됩니다.

예제 코드로 확인하기

아래 예제는 두 방식의 차이를 한눈에 보여줍니다.

#include <stdio.h>
int main() {
    int i = 5, j;
    j = i++;
    printf("\nafter postfix increment i=%d j=%d", i, j);
    i = 5;
    j = ++i;
    printf("\nafter prefix increment i=%d j=%d", i, j);
    return 0;
}

실행 결과는 다음과 같습니다.

after postfix increment i=6 j=5
after prefix increment i=6 j=6

정리

핵심을 요약하면 다음과 같습니다.

  • 단독 사용 시: i++++i 모두 i의 값을 1 증가시키며 결과는 동일합니다.
  • 후위(i++): 현재 값을 먼저 사용(대입)한 후에 값이 증가합니다.
  • 전위(++i): 값이 먼저 증가한 후 그 값이 사용(대입)됩니다.

따라서 증감 연산자를 다른 표현식 안에서 사용할 때는 전위와 후위 중 어떤 것을 선택하느냐에 따라 프로그램의 결과가 달라질 수 있으므로 주의해야 합니다.