포인터는 메모리의 주소값을 저장하는 변수이다.


[ 기본형태 : 포인터 타입* 포인터명 ]


Pointer, 가르키는 지시자인 포인터는 DataType 명시하는 대신, 자신이 가르킬 변수의 DataType을 명시한다.



다른 변수들은 선언 시 DataType에 의해 변수의 크기가 결정되는 반면,


포인터는 주소값을 저장하기 때문에, DataType과는 상관없이 항상 4byte의 크기를 유지한다.


<예시>




<결과값>









[포인터 문제]


다음 값이 어떻게 찍히는 지 생각해 보시오.



































= 답 







==문제풀이



printf("%d", *ptr++);        printf("%d", *ptr);


 : 포인터명 뒤에 붙은 ++은 증감연산자중에서 후 중감연산자로, 


  printf함수를 먼저 실행한 후에, 해당 값을 증가시킨다.


  printf함수를 실행하고 나면, *ptr++ 앞의 *이 사라지고, ptr++만 남게 되는데,


  이는 주소값을 증가하라는 의미임으로, ptr의 주소값은 그 다음주소로 이동하게 된다.


  그렇기 때문에 그 다음 printf로 ptr의 값을 찍게 되면, ptr[1]의 값인 10이 찍히게 된다.




printf("%d", *ptr+1);        printf("%d", *ptr);


 : 포인터명 앞에 별표(*)를 찍음으로써, 값을 의미하며 *ptr 의 값은 10이 나오게 된다.


  값에다가 +1을 한 값을 출력하라고 하였기 때문에, *ptr+1은 11이 찍히게 된다.


  그러나, +1은 값자체를 증가시키는 것이 아니라, printf함수를 이용한 출력시에만 이용되는 것이기 때문에,


  *ptr을 다시 출력하게 되면, 원래의 값 10이 나오게 된다.




printf("%d", ++*ptr);        printf("%d", *ptr);


 : 포인터명 앞에 붙은 ++은 증감연산자 중에서 선 증감연산자로,


  해당 값을 먼저 증가 시킨 후, printf함수를 실행하기 때문에, 11이 찍히게 된다.


  증감연산자는 앞의 +1과 달리 ptr의 값 자체를 증가시키기 때문에,


  다음  printf함수로 출력하게 되면, 바뀐 값(11)이 찍히는 것을 알 수 있다.




printf("%d", *(ptr+1));        printf("%d", *ptr);


 : 포인터명에 +1이 붙었으니, 해당값을 증가시켜야 하나, 별표(*)와 괄호로 구분되어 있으므로,


  주소값을 증가시켜 값을 출력하라는 의미이기 때문에, 22가 찍히게 된다.


  +1은 앞에서도 말했다 싶이, 값자체를 증가하는 것이 아니기 때문에, 


  *ptr을 다시 출력하면, 원래의 값 11이 찍히게 된다.




printf("%d", *ptr+=1);        printf("%d", *ptr);


 : *ptr+=1은 *ptr= *ptr+1과 같기 때문에, 값을 증가시키라는 의미이다.


  그래서 11에 +1이 증가된, 12가 찍히게 된다.


  +=은 값 자체가 증가된 것이기 때문에, *ptr를 찍게 되면, 증가된 값인 12가 찍히게 된다.




printf("%d", *++ptr);        printf("%d", *ptr);


 : ++은 포인터명 앞에 붙었으니, 증감연산자 중에서 선 증감연산자인데, 


  별표(*)와 포인터명 사이에 쓰였으므로, *(++ptr)과 동일하다.


  그러므로, ptr의 주소값을 증가시킨 후에, 값을 출력하라는 의미로, 


  주소값이 증가된 22가 찍히게 된다.


  ++은 해당 값 자체를 증가 시키기 때문에, 다시 ptr을 찍게 되면 22가 찍히게 된다.




printf("%d", (*ptr)++);        printf("%d", *ptr);


 : 괄호의 값을 먼저 계산해야 함으로, 후증감연산자는 값을 증가시킨라는 의미이다.


  그렇기 때문에, 처음에 printf함수로 출력시, 22가 찍히게 되지만,


  2번째로 찍게 되면, 22에서 값이 1증가된 23이 찍히게 된다.

'C' 카테고리의 다른 글

배열  (0) 2018.01.08
입력버퍼 비우기  (0) 2018.01.06

+ Recent posts