포인터변수인 p에 *p++처럼 사용되는경우를 많이 볼수 있습니다.
예제와 함께 배워봅시다.
배열 arr을 가리키고있는 포인텨변수 p를 선언하고 *p++를 통해 배열의 요소를 하나씩 출력해봤습니다.
*연산자와 ++연산자는 우선순위가 같습니다. 하지만 우측이 우선적으로 계산되기때문에 ++가 먼저 연산됩니다.
하지만 ++의경우에는 그 문장이 끝난 후에서야 값이 증가하죠. 그래서 *로 먼저 참조를 하고 출력이 끝난 후에서야 p의 값이 증가합니다.
하지만 (*p)++의 경우에는 전혀 다른식이 되버리죠. 이경우에는 먼저 p에 접근한후 p가 가리키고있는 곳의 값을 증가시킵니다.
결국 포인터의 주소가 바뀌는게 아니고 포인터가 가리키고있는 값이 증가하게되버립니다.
*p++의 경우에는 10,20,30,40,50이 순서대로 출력됐어야 할텐데 결과는 전혀 다른결과가 나왔죠.
이 예제를 보면 포인터가 가리키고있는 위치가 바뀌는게 아니라 가리키고있는곳의 값이 바뀌는걸 알수 있습니다.
(*p)++는 ++가 실행되기 전에 p가 가리키고있는곳으로 접근을 먼저해서 ++연산을 하게될때 그 접근한곳의 값을 증가시키게됩니다.
저번에 배운 포인터연산 어따써먹냐..싶겠지만 그것들을 알고있어야 위 예제들도 이해가 가능한것이죠.
'프로그래밍 > C 기초' 카테고리의 다른 글
[C언어 강좌] #41 void 포인터 (0) | 2017.01.16 |
---|---|
[C언어 강좌] #40 NULL 포인터 (0) | 2017.01.15 |
[C언어 강좌] #38 포인터끼리 연산 (0) | 2017.01.13 |
[C언어 강좌] #37 포인터연산 (0) | 2017.01.12 |
[C언어 강좌] #36 포인터 매개변수 (0) | 2017.01.11 |