본문 바로가기

C

C <10>. 포인터 (1)개념잡기


오늘의 주제

1. 포인터의 개념 


열 번째 시간입니다.^^

지난 번에는 반복문에 대하여 알아보았습니다.
정말 기초적인 문법들이라 꼭 알아두셔야 합니다~^^
앞으로 계속 쓰일거니깐요 ㅎ

자 그럼 오늘은 또 중요한 개념 포인터에 대해서 알아볼까요?ㅎ
출바알~~~~~~~~~~~~


# 포인터란?

포인터란 무엇일까요?
우리말로 하면 가리키는놈?ㅋㅋ 뭐 이런뜻이겠죠?
네 여기서도 똑같은 뜻입니다.

무언가를 가리키는 녀석을 포인터라고 부릅니다.

자, 포인터를 설명하기 전에 잠시 변수에 대해서 다시 생각해 봅니다.

우리가

int a = 15;

이렇게 선언을 해주면 컴퓨터는 메모리의 적당한 공간에 15라는 값을 저장하게 됩니다.
그것을 저는 이렇게 표현해 보겠습니다.
요로코롬 메모리 공간이 있다고 생각해 봅니다.


저기 메모리의 한 블럭을 하나의 상자라고 생각해 봅시다.
이렇게 사과박스 모양의 상자가 하나 있습니다.
속이 텅 비어있지요~
비어있는 메모리 공간이라고 생각합니다^^


비어있는 메모리 공간에 우리가 뭔가를 채워주려 합니다.
그냥 우리끼리 생각한대로 박스에 뭔가를 채워넣는다고 생각합시다.

어느 농부가 박스에다가 사과를 다섯개 담고 그 위에다가 메모를 해 둡니다.
이 박스가 위치한 주소는 '사랑시 행복구 고백동 1055번지' 라고 적고, 여기에는 '사과'가 들어있다. 그리고 그 사과 이름은 '마이애플'이다.
그리고 메모에는 없지만 내용물을 들여다 보니 5개가 들어있는 것을 알 수 있습니다.
 



이해 되시나요? 농부가 한 일이 컴퓨터가 해 준 일이라고 생각해 보면, 컴퓨터는 메모리에 값을 집어 넣어놓고 저렇게 기억을 해 둡니다.
그럼 요것을 컴퓨터가 하는일로 표현해 봅시다.
메모리의 공간(박스 속)에 '15'라는 숫자를 넣어놓고 그 상자의 종류는 'int' 정수형 이며, 이름은 'a'이다. 그리고 주소는 0x50F3A32E라고 기억합니다. 


이것이 우리가 변수를 메모리에 생성했을때 일어나는 일입니다. 조금 감이 오시나요?ㅎㅎ

그런데!!! 포인터는!!
저기 박스 안에 값이 다른 녀석의 주소값이 들어가게 되는 것입니다.
그것이 무슨 말이냐...?
감이 오시나요?

변수라는 녀석들은 자신의 메모리 영역에 '값'을 가지게 되죠.
위에 우리가 선언했던 int a는 15라는 값을 가지죠.

그리고

int *ptrA = &a;

이런식으로 선언을 해주게 되면,  "ptrA라는 이름을 가지는 int를 가리키는 포인터형에 a의 주소를 집어 넣겠다." 라는 뜻이 됩니다.
즉, 포인터형 변수는 그녀석이 가리키게 될 녀석의 변수형 포인터가 되고, 값은 가리키는 녀석의 주소를 가지게 됩니다.

그림으로 표현 해 봅니다.
이녀석은 포인터 박스입니다.
자신도 '사랑시 행복구 고백동 1055번지'라는 메모리 주소를 가지고 있고, 자신의 상자 속에는 다른 변수의 주소를 담고 있습니다.
다른 변수의 주소는 '솔로시 불행구 차임동 5043번지' 네요~


요것을 컴퓨터가 하는 것으로 바꿔보면?
int형 변수를 가리키는 포인터 ptrSolo는 0x50F3A32E번지에 할당이 되었고, 그 메모리 안에 0x305E438A라는 다른 변수의 주소값을 가지고 있네요.


포인터는 이렇게 다른 변수의 주소를 저장하고 있는 주소값을 가지는 변수라고 생각하시면 되겠습니다~

자.. 그럼 포인터가 왜 필요한가??
그것은 다음에 함수라는 녀석과 함께 알게 되실거예요~
일단 포인터의 개념이 이해될 때 까지 개념을 충실히 알아두시길 바랍니다^^*

이렇게 이론 설명을 마치고 그럼 다음 번에는 직접 간단히 몇줄 코딩으로 실습 해보도록 할게요~ ^0^




by yagom

twitter :@yagomsoft

p.s 제 포스팅을 RSS 피드로 받아보실 수 있습니다.

RSS Feed 받기   


↓↓↓저 열심히 썼는데 추천 한방 꾹 눌러주고 가시는 건 어떨까요? ^~^ 사랑합니다~ ↓↓↓ 

'C' 카테고리의 다른 글

C <12>. 함수  (4) 2012.04.02
C <11>. 포인터 (2)간단실습  (0) 2012.03.27
C <9>. 반복문(2) do-while  (7) 2012.02.06
C <8>. 조건문(3) 3항 연산자  (7) 2012.01.28
C <7>. 조건문(2) switch  (6) 2011.12.14