[프로그래밍언어, C] 포인터 변수와 연산자 우선순위

2017. 3. 12. 17:029급 공무원/컴퓨터 일반

책이 따로 한 권이 나와있을 정도로 포인터는 C언어에서 매우 중요하면서도 가장 헷갈리는 개념이다.


포인터연산자의 우선순위는 어디 쯤일까?



Symbol1연산 형식결합성
[ ] ( ) . –>후위 ++ 및 후위 ––왼쪽에서 오른쪽
전위 ++ 및 전위 –– sizeof & * + – ~ !단항오른쪽에서 왼쪽
형식 캐스팅단항오른쪽에서 왼쪽
* / %곱하기왼쪽에서 오른쪽
+ –더하기왼쪽에서 오른쪽
<< >>비트 시프트왼쪽에서 오른쪽
< > <= >=관계왼쪽에서 오른쪽
== !=같음왼쪽에서 오른쪽
&비트 AND왼쪽에서 오른쪽
^비트 제외 OR왼쪽에서 오른쪽
|비트 포함 OR왼쪽에서 오른쪽
&&논리 AND왼쪽에서 오른쪽
&#124;&#124;논리 OR왼쪽에서 오른쪽
? :조건식오른쪽에서 왼쪽
= *= /= %=

 += –= <<= >>=&=

 ^= |=
단순 및 복합 할당2오른쪽에서 왼쪽
,순차적 계산왼쪽에서 오른쪽

  1. 연산자는 내림차순 우선 순위로 나열됩니다. 여러 연산자가 같은 줄 또는 그룹에 표시된 경우, 해당 연산자는 우선 순위가 같습니다.

  2. 모든 단순 및 복합 할당 연산자의 우선 순위는 같습니다.

(출처 : https://msdn.microsoft.com/ko-kr/library/2bxt6kc4.aspx )


 위에서 볼 수 있듯. 포인터 연산자는 단항연산자로 표에서 두번째에 위치하고 있다. 즉, 매우 우선순위가 높다는 뜻. 그렇기 때문에 포인터변수보다 먼저 연산하는 연산자는 후위 증감연산자(++,--) 뿐이다.(1) 그래서 후위연산으로 포인터 변수가 가리키는 값을 증가시키기 위해서는 포인터 변수를 괄호로 묶어주어야 한다.(2) 전위 증감연산자는 포인터 연산자와 우선순위가 같기 때문에 변수에 가까이 있는 연산자 순으로 계산이 진행된다. (3)(4)

ex)
 (1) *ptr++ > *(ptr++)
 (2) (*ptr)++
 (3) ++*ptr > ++(*ptr)
 (4) *++ptr > *(++ptr)