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

C 언어 배열의 전위·후위 증가 연산자(++) 완벽 가이드

C 언어에서 증가 연산자(++)는 변수의 값을 1만큼 늘리는 단항 연산자입니다. 이 연산자가 배열 요소와 결합하면 전위 증가(pre-increment)후위 증가(post-increment)냐에 따라 결과가 완전히 달라지기 때문에, 정확한 동작 순서를 이해하는 것이 매우 중요합니다.


증가 연산자(++)의 두 가지 형태

  • 전위 증가(++a) : 연산자가 피연산자 앞에 위치합니다. 값이 먼저 1 증가한 뒤, 그 증가된 값이 다른 연산에 사용됩니다.

  • 후위 증가(a++) : 연산자가 피연산자 뒤에 위치합니다. 현재 값이 먼저 다른 연산에 사용된 후에야 값이 1 증가합니다.

// 전위 증가 : 먼저 증가, 나중에 대입
z = ++a;   // a = a + 1;  z = a;

// 후위 증가 : 먼저 대입, 나중에 증가
z = a++;   // z = a;      a = a + 1;

배열 요소에 증가 연산자 적용하기

메모리상의 배열 요소에 접근할 때도 같은 원리가 그대로 적용됩니다. 크기가 5인 배열을 선언하고 컴파일 시간 초기화를 수행한 뒤, 전위 증가된 값을 변수에 대입하는 과정을 살펴보겠습니다.

a = ++arr[1];  // arr[1] = arr[1] + 1;  a = arr[1];
b = arr[1]++;  // b = arr[1];           arr[1] = arr[1] + 1;

예제 1 : 전위·후위 증가의 기본 동작

#include <stdio.h>
int main(){
    int a, b, c;
    int arr[5] = {1, 2, 3, 25, 7};
    a = ++arr[1];
    b = arr[1]++;
    c = arr[a++];
    printf("%d--%d--%d", a, b, c);
    return 0;
}

실행 결과

4--3--25

코드 해설

  1. a = ++arr[1]; → arr[1](초기값 2)이 먼저 3으로 증가한 뒤, a에 3이 대입됩니다.

  2. b = arr[1]++; → 현재 값 3이 b에 먼저 대입되고, 이후 arr[1]은 4로 증가합니다.

  3. c = arr[a++]; → a의 현재 값 3을 인덱스로 사용해 c = arr[3] = 25가 대입된 후, a는 4로 증가합니다.

따라서 printf 함수는 최종적으로 4--3--25를 출력하게 됩니다.

예제 2 : 다른 인덱스에 적용하기

이번에는 인덱스 3의 요소에 증가 연산자를 적용해 동작을 더 자세히 살펴보겠습니다.

#include <stdio.h>
int main(){
    int a, b, c;
    int arr[5] = {1, 2, 3, 25, 7};
    a = ++arr[3];
    b = arr[3]++;
    c = arr[a++];
    printf("%d--%d--%d", a, b, c);
    return 0;
}

실행 결과

27--26--0

코드 해설 및 주의 사항

  1. a = ++arr[3]; → arr[3](초기값 25)이 먼저 26으로 증가한 뒤, a에 26이 대입됩니다.

  2. b = arr[3]++; → 현재 값 26이 b에 먼저 대입되고, 이후 arr[3]은 27로 증가합니다.

  3. c = arr[a++]; → 인덱스로 26을 사용하므로 배열의 유효 범위(0~4)를 벗어난 접근이 발생합니다.

주의 : 세 번째 문장은 배열의 경계를 넘어서는 접근이므로, C 표준에서 정의되지 않은 동작(undefined behavior)에 해당합니다. 따라서 컴파일러나 실행 환경에 따라 전혀 다른 값이 출력되거나 프로그램이 비정상 종료될 수 있습니다. 위 결과의 마지막 값 0 역시 특정 환경에서 관찰된 값일 뿐 어떤 경우에도 보장되지 않습니다. 실무 코드에서는 반드시 인덱스가 배열 크기 이내인지 검사해야 합니다.

핵심 정리

  • 전위 증가(++i) : 값이 먼저 증가하고, 증가된 값이 연산에 사용됩니다.

  • 후위 증가(i++) : 현재 값이 먼저 연산에 사용되고, 그다음 값이 증가합니다.

  • 배열과 함께 사용할 때는 연산 순서인덱스가 계산되는 시점을 항상 주의 깊게 확인해야 하며, 배열 범위를 벗어나는 접근은 미정의 동작을 유발하므로 피해야 합니다.