정보처리기사_실기18_C언어

박하영·2022년 4월 10일
0
post-thumbnail

C Programming (포인터)

포인터

 

포인터 예제 1

  • 다음 출력값은?

var값: 5
var의 주소값(& 연산자): 0x100

 

포인터 예제 2

  • 다음 출력값은?

printf("%d", *pc) 부분은 변수 pc의 디레퍼런스값, 즉 pc가 지칭하는 주소에 들어가 있는 값을 출력하라는 의미로

pc가 가지고 있는 또는 가르키고 있는 주소값 0x100에 들어있는 값을 출력하는 것 이기 때문에 c가 가지고 있는 값인 5가 출력된다.

  • '&'은 주소가 들어있는 레퍼런스 값, '*'은 주소가 있는 곳에 가서 들어있는 값을 가져오는 디레퍼런스 값이다.

 

포인터 예제 3

  • 다음 출력값은?

-> 출력값: 1이 두번 찍힌다.

예제 2번에서 알게된 내용으로 쉽게 풀 수 있는 예제이다. c에 5값을 저장후, pc에 c의 주소값을 참조하게 한 뒤에, c의 값을 바꾼다 하여도, pc에 값을 저장한 시점의 전후와 상관없이 해당 주소값에 들어있는 값을 디레퍼런스하여 가져오기 때문에 바뀐 값인 1이 출력되게 되는 것 이다.

 

포인터 예제 4

  • 다음 출력값은?

3번 예제와 비슷한 예제인데, 포인터변수 pc, 디레퍼런스값에 1을 넣으면 c값에 1을 넣은것과 마찬가지이므로, 출력값 또한 예제 3번과 동일하게 나온다.

 

아래 사진을 보면 포인터 변수 ptr의 디레퍼런스한 값인 *ptr은 X와 동일하게 사용할 수 있는 것을 알 수 있다. (실로 같은 의미이다)

 

포인터 예제 5

  • 다음 출력값은?

 

포인터 예제 6

  • 다음 출력값은?

이 예제에서는 printf해서 출력하는 두 문장의 의미를 잘 파악하는 것이 핵심이다. printf("%d %d %d\n", p[0], p[1], p[2]); 부분과 printf("%d %d %d\n", p, (p+1), *(p+2)); 부분

 

포인터 예제 7

  • 다음 출력값은?

순서대로 3, 4, 2이다. 6번 예제와 마찬가지로 배열에서 주소 레퍼런스값과 디레퍼런스값에서 + 1과 -1이 의미하는 바는 배열상에서 한칸 좌측과 우측에 담겨있는 값을 의미한다.

 

포인터 예제 8

  • 다음 출력값은?

 

포인터 예제 9

  • 다음 출력값은?

두 자리의 x값과 y값을 변경해주려고 했으나, 변경이 되지 않았다. 이유는 swap 함수에서의 변경이 리턴이나 전역 변수로서의 데이터 변경이 되지 않았기 때문이다. 9번에서의 변경이 안되었던 부분을 포인터를 이용해서 변경한 10번 예제를 살펴보자.

 

포인터 예제 10

  • 다음 출력값은?

10번 예제에서는 9번과 다르게 데이터 값을 가져오는게 아니라 변수 x와 y의 주소값 레퍼런스값을 swap 함수로 넘기구, swap 함수 내에서 포인터 변수로 x와 y 각각 변수에 들어있는 값을 a, b의 디레퍼런스를 통해 해당 값을 바꾸어 주었다.

 

포인터 예제 11

  • 다음의 결과(리턴)값은?

-> 150 (Data[5]의 총합)

profile
RM_young

0개의 댓글