【 C 언어 】 #35 포인터 이해하기
포인터 는 C언어에서 종종 중요하게 사용된다. 포인터를 이용하여 메모리로 직접 접근이 용의하고 하드웨어적인 부분을 직접 컨트롤 할 수 있기 때문이다.
다만 처음 개념 이해가 어려울 수 있으나 예제 내용을 바꾸어가며 테스트해 보면 비교적 쉽게 이해될 것이다.
포인터 변수는 원변수의 분신의 역할을 하게 되고 원변수가 가지는 똑같은 값을 지닌다. 즉, 원변수의 값이 바뀌면 포인트 변수의 값이 똑 같은 값으로 바뀌며, 그 반대도 마찬 가지다.
▶ 문제 : 변수 두 개를 선언후 각각의 포인터 변수를 선언하고 변수 내용을 바꾸면 포인터 변수의 내용도 바뀌는지 확인하는 프로그램을 작성하라.
▶ 포인트 :
- mainA 변수에 포인터 변수 *ghost, mainB 변수에 포인터 변수 *pman 을 지정
- 포인터 변수 선언 : int* ghost
- 지정 방법 : 변수명에 '&'를 붙이고 포인트 변수에 대입 ghost =&mainA
▶ 프로그램 :
▶ 실행 결과 :
▶ 보충설명 :
ghost = &manA; // manA의 분신으로 포인터 변수인 ghost를 지정
*ghost = 1; //분신 관계 이므로 *ghost에 입력한 1값이 manA에도 저장 됨
printf("manA = %d, *ghost=%d \n\n",manA, *ghost); // 값 확인
manA = 2; // manA에 2를 입력해도 분신 *ghost에 2가 저장됨
printf("manA = %d, *ghost=%d \n\n",manA, *ghost);
pman = &manB; // manB의 분신으로 포인터 변수인 pman을 지정
*pman = 3; // 분신인*pman에 3를 입력하면 manB에도 3이 저장됨
printf("manB = %d, *pman=%d \n\n",manB, *pman);
pman = &manA; //manB의 분신으로 지정한 pman을 manA에 추가로 분신 // 지정 하면 manB에는 분신이 없는(해제) 상태가 되고
// manA는 기존 분신 *ghost에 , *pman까지 새로 추가된다.
*pman = 4; // pman은 현재 manA의 분신이다.
printf("manA=%d, *pman=%d, *ghost=%d, manB=%d, \n\n", manA, *pman, *ghost, manB);
manA = 5; // manA의 분신으로 ghost, pman 두개가 지정 되어 있다.
printf("manA=%d, *pman=%d, *ghost=%d, manB=%d, \n\n", manA, *pman, *ghost, manB);
*ghost = 6;
printf("manA=%d, *pman=%d, *ghost=%d, manB=%d, \n\n", manA, *pman, *ghost, manB);
manB = 7; // manB 값을 바꾸어도 분신해제된 pman값은 변하지 않는다
printf("manA=%d, *pman=%d, *ghost=%d, manB=%d, \n\n", manA, *pman, *ghost, manB);
[ 코드에 실행시 결과 값 표시 ]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
▶ 소스코드 다운로드 :
'Language > C & C++' 카테고리의 다른 글
【 C 언어 】 #37 NULL 널 문자 이해하기 (0) | 2018.05.03 |
---|---|
【 C 언어 】 #36 문자열 포인터 이해하기 (0) | 2018.04.23 |
【 C 언어 】 #34 변수의 메모리 번지 이해하기 (0) | 2018.04.17 |
【 C 언어 】 #33 배열 이해하기 2 (국영수 성적 예제) (0) | 2018.04.16 |
【 C 언어 】 #32 배열 이해하기 (0) | 2018.04.16 |