컴공과컴맹효묘의블로그

C언어 포인터 개념 쉬운 설명 본문

컴퓨터/C언어

C언어 포인터 개념 쉬운 설명

효묘 2019. 6. 12. 17:46
반응형

 


안녕하세요. 이번 포스팅은 C언어의 포인터개념에대한 설명입니다. 많은 사람들이 어려워하셔서 최대한 쉬운 방법으로 설명해드리겠습니다.




일단 사전지식으로는 변수의 개념을 알아야합니다.



포인터 변수
우리는 일반적으로 다음과 같은 변수를 선언해왔습니다.

 

int age = 20; 
double height = 175.3; 

 

 

위 코드는 int형과 double형이 쓰였습니다.
이번엔 조금 특이한 변수를 알려드리겠습니다.
바로 (int*)형입니다.

 

int *pa;//int* pa; 
char *pc;//int* pc; 

 

똑같은 변수같은데 이 변수에는 앞에 별*이 붙었습니다.
이 코드가 바로 포인터 변수를 선언하는 코드입니다.
바로 변수의 "주소"를 저장할 수 있는 변수입니다.
그렇다면 주소가 무엇일까요?

 

 

int year = 2019; 
printf("year : %d\n", year); 
printf("&year : %x", &year); 

 

>> year : 2019
     &year : 0x00ff14;

생소해 보이지만, scanf에서 많이 보셨을겁니다.
여기서 &는 변수의 "주소"를 표현하는 연산자입니다.
여기서 "주소"란, 말 그대로 변수가 살고있는 주소입니다.
우리세계의 주소는 A동 B아파트 103호 라고 표현하지만, 컴퓨터의 세계의 주소는 위와같이 0x00ff14로 표현됩니다.


이제 주소라는 개념을 이해하셨다고 생각하고 주소를 저장하는 포인터 변수에 대해 설명하겠습니다.


int a = 31; 
int* pa = NULL;//포인터 변수 초기화 (pa에는 어떠한 주소도 저장되어있지 않는다.) 

pa = &a; 


a의 주소가 0x00ff00이라고 가정합니다.
2행에서는 (int*)이라는 자료형으로 포인터 변수 pa를 선언하고있습니다.
4행에서, pa는 포인터 변수니까 a의 주소 즉, &a==0x00ff00값을 저장합니다.
이제 pa를 출력하면 0x00ff00이라는 값이 나옵니다.


이제 pa라는 상자 안에는 0x00ff00이라는 생소한 값이 들어있습니다. 하지만 우리는 이 주소가 변수 a가 살고있는 주소와 같다는 것을 알고있습니다.


여기서 우리는 pa는 a의 주소를 알고있으니, 포인터 변수 pa를 이용하여 a가 가지고있는 값을 알아낼 수 있습니다.

 

 

printf("%d",*pa); 

 

>>31

바로 *pa를 출력하면 a가 가지고 있는 값 31이 나옵니다. 여기서 *의 의미는 포인터 변수의 값을 "참조" 하겠다는 의미입니다.
그렇다면 "참조"란, 특정 "주소"에 저장되어있는 값을 출력하겠다는 의미입니다.
즉, *을 이용하여 pa==0x00ff00을 "참조"했으니, 0x00ff00에 저장되어있는 31을 출력하겠다는 의미입니다.


다시말해서, 변수 a와, *pa는 정확히 같습니다. 둘 다 똑같은 주소에 저장되어있는 값을 출력하는 변수기 때문입니다.




마지막으로 짧게 정리해드리겠습니다
&은 "주소"를 출력한다.
*는 "주소"에 있는 "값을 출력한다. 즉, a==*&a 서로 같은 의미인 것을 알 수 있다.



이로써 이번 포스팅을 마치겠습니다. 잘 이해가지 않는 것이 있으면 댓글에 써주시면 최대한 쉽고 친절히 알려드리겠습니다.

반응형
Comments