# [C] 포인터 - 기초 개념 설명
* 포인터는 빵을 먹기위한 일진의 처절한 사투를 다루는 이야기야. 무슨 말인지 모르니까 일단 예제를 보자.
int Bbang = 1000;
int *DD = &Bbang;
학교 매점 '메모리'에 int맛 Bbang이 새로 들어왔어. 오늘 그 빵을 1000원에 판데.
근데 학교 짱 DD가 "야, 저기 내가 가르키고 있는 int맛 Bbang 있는 진열대 보이지? 빵에다 별 찍어놨으니까 알아둬라."라고 선포했어.
위에 문장은 이해하려 하지말고 그냥 머리속에서 상황을 상상만 해. 그럼 이걸 다시 외계어로 친절하게 설명해줄께.
int Bbang = 1000;
먼저 int Bbang 이라고 선언하면 컴퓨터 메모리에 int형의 Bbang이라는 변수가 들어갈 메모리 공간이 잡혀.
그리고 그 공간에 1000이라는 값을 넣고 있는 걸 볼 수 있어.
메모리 공간이 잡히게 되면 그 메모리 공간의 주소값이 있겠지? 일단 여기까지 알아두자.
int *DD = &Bbang;
이건 DD라는 포인터가 그 Bbang이 있는 주소(&)를 가르키겠다(*)는 거야.
여기서 별 표시를 빼면 그냥 변수가 되버리짆아? 그러니까 주소를 가르킨다는 의미를 갖기 위해서 포인터는 별* 표시를 하는거야.
자, 그리고 이렇게 선언한 이후부터는 조심해야 돼.
왜냐하면 선언할때의 *표시와, 실제 사용할때의 *표시는 개념이 다르기 때문이지.
이때부터는 그냥 DD가 누구냐? 라고 묻게되면 "난 Bbang의 주소값(진열대)을 가르키고 있어요"라는 거야. 주의해.
즉, 주소가 아니라 1000이라는 값을 가르키고 싶다면 단순히 주소가 들어있는 DD가 아니라. *DD를 이용해야해
*DD가 누구냐? 라고 해야지만 "난 주소값(진열대) 안에 있는 빵을 가르키고 있다"라고 되는거지.
그럼 예를 들어서 선언말고 사용할때의 *표시가 어떻게 다른지 볼까?
여기서 printf가 떳다고 치자. 두 가지 취조하는 것을 예를 들어 볼께.
printf("%d", DD);
이건 "DD야, 좋은 말로 할 때 니가 알고 있는 진열대 위치(주소)를 불어라." 라고 하는 거야.
Bbang가격이 어떻게 변하던 말던 그 빵은 계속 그 자리에 있기 때문에 이 메모리 주소값은 변하지 않아.
printf("%d", *DD);
이건 "DD야, 좋은 말로 할때 진열대 안에 니가 점찍어 둔거 얼만지 불어라" 라고 하는거야.
이 가격은 실제 Bbang 가격이 어떻게 변하냐에 따라서 변할 수 있어.
* 변수에 들어가 있는 데이터를 바꾸면 포인터는 어떻게 될까?
Bbang = 10000;
이라고 빵 가격을 바꿔도, DD는 계속 Bbang만 가르키고 있기 때문에 DD가 가르키고 있는 주소(진열대)는 전-혀 변하지 않겠지.
진열대는 그 위치에 그대로 있으니까. 이것이 바로 포인터의 가장 큰 특징이야.
물론 *DD라고 쳐서 진열대 안에 있는 빵까지 파고들면 빵이 만원으로 오른것까지 알 수 있겠지.
* 정리하자.
Bbang은 1000
&Bbang은 1000이라는 값이 들어 있는 메모리 주소값.
DD는 Bbang이 있는 주소값. 위의 &Bbang와 동일
*DD는 Bbang이 있는 주소값에 있는 데이터. 즉 1000. Bbang값과 동일.
* 아래는 코드야. 아마 이쪽으로 이해하는게 더 쉬울꺼야.
#include<stdio.h>
int main()
{
return 0;
결과값과 코드에 적힌 주석을 비교해가면 보면 확실하게 이해가 갈꺼야.
보통 주소값은 %d로 표현시 7자리 숫자로 표현되는데 컴퓨터마다 자릿수가 틀릴수도 있고, 돌릴때마다 주소값이 바뀌는건 정상이니까 걱정하지마. 중요한건 매 결과값에서 보이는 주소값은 모두 똑같다는거야. 실제로 출력해보면 Bbang 변수의 주소값이나 그걸 가르키는 포인터 DD가 가진 주소값이나 같다는 걸 볼 수 있지.
'IT > 기타' 카테고리의 다른 글
[ASCII Table] 아스키코드 표 (0) | 2017.09.13 |
---|---|
daum 포토업로더 Flash Player 10 최적화 오류 해결법 (0) | 2017.08.30 |
[맥북] 한영 전환, delete 키 (0) | 2017.01.23 |
[Windows] 윈도우에서 화면캡쳐 + 자동저장 (0) | 2016.07.17 |
광고 용어 - RPM, CPC, CTR 등 (0) | 2016.06.17 |