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

C/C++에서 전위 증감 연산자(++*)와 후위 증감 연산자(*++)의 우선순위

이 글에서는 C와 C++에서 전위(prefix) 증감 연산자후위(postfix) 증감 연산자의 우선순위를 살펴봅니다.

연산자 우선순위의 기본 규칙

C/C++에서 증감 연산자와 역참조 연산자의 우선순위는 다음과 같습니다.

  • 전위 연산자(++, --)는 역참조 연산자(*)보다 높은 우선순위를 가집니다.
  • 후위 연산자(++, --)는 전위 연산자와 역참조 연산자 모두보다 더 높은 우선순위를 가집니다.

따라서 ptr이 포인터일 때 다음과 같이 해석됩니다.

  • *ptr++*(ptr++) : 포인터 자체를 먼저 증가시킨 후 역참조합니다.
  • ++*ptr++(*ptr) : 포인터가 가리키는 값을 먼저 증가시킵니다.

예제 1: ++*ptr (값 증가)

#include<iostream>
using namespace std;
int main() {
   char arr[] = "Hello World";
   char *ptr = arr;
   ++*ptr;
   cout << *ptr;
   return 0;
}

출력 결과

I

처음에 ptr은 문자열의 첫 번째 문자 'H'를 가리키고 있습니다. 여기서 ++*ptr을 실행하면 포인터가 아닌 포인터가 가리키는 값(H)이 1 증가하므로, 결과적으로 'I'가 출력됩니다.

예제 2: *ptr++ (포인터 증가)

#include<iostream>
using namespace std;
int main() {
   char arr[] = "Hello World";
   char *ptr = arr;
   *ptr++;
   cout << *ptr;
   return 0;
}

출력 결과

e

처음에 ptr은 마찬가지로 'H'를 가리키고 있습니다. 하지만 *ptr++은 후위 연산자의 우선순위가 더 높기 때문에 포인터 자체가 증가하여 다음 메모리 위치를 가리키게 됩니다. 따라서 두 번째 문자인 'e'가 출력됩니다.

정리

표현식해석동작
++*ptr++(*ptr)포인터가 가리키는 이 증가
*ptr++*(ptr++)포인터 주소가 증가한 후 역참조

두 표현식은 비슷해 보이지만 연산 대상이 완전히 다르므로, 포인터와 증감 연산자를 함께 사용할 때는 괄호를 명시적으로 사용하는 것이 코드의 가독성과 안정성 측면에서 권장됩니다.