프로그래밍/C 기초
[C언어 강좌] #38 포인터끼리 연산
도끼_Dokki
2017. 1. 13. 09:00
저번에 포인터연산에 대해 간단하게 알아봤었죠.
포인터에 정수를 더하거나 뺄수 있습니다. 단 그것은 포인터의 자료형 크기만큼씩 증가하고 감소하는거였죠.
이번엔 포인터끼리의 연산을 알아봅시다.
우선 포인터끼리의 덧셈입니다.
결론부터 말하자면 이건 컴파일러에서 허용하지 않고 필요하지도 않습니다.
위처럼 포인터끼리 더하려하면 컴파일에러를 뿜어냅니다.
p1과 p2의 합은 사실상 p1,p2와는 전혀 무관한 값이고 아무런 의미도 없는 주소입니다.
이런경우 프로그래머의 실수인경우가 대부분이기때문에 컴파일러는 이것을 오류로 처리합니다.
하지만 포인터끼리의 뺄셈은 가능합니다.
이것은 실제로 의미있는값이기도 합니다. 그것은 두 주소간의 거리를 의미하기 때문입니다.
근데 여기서도 이상한일을 볼수 있습니다.
분명 결과는 4가 나와야할텐데.. 1이나왔네요?
이것은 주소간의 거리를 의미합니다.
위 예제에서 str[0]은 P고 str[3]은 n이겠죠 그리고 P와 n은 주소값이 3이 차이가납니다.
P와 n의 거리는 3이기때문에 p2에서 p1을 뺐을때는 3이 출력됩니다.
즉 포인터끼리의 뺄셈은 그 거리를 의미하고 크기를 구하고싶으면 sizeof로 자료형의 크기를 구해서 곱해주면 됩니다.
.