【 C 언어 】 #35 포인터 이해하기

Language/C & C++ 2018. 4. 23. 14:02 Posted by 엑소더스팩토리
반응형

【 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);



[ 코드에 실행시 결과 값 표시 ]




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



▶ 소스코드 다운로드 :  


35 포인터 이해하기.cpp


반응형