훗날...
허접한 프로그램이 아니라 좀 제대로 된 프로그램을 만든다면...
C언어에서 만큼은
배열과 포인터 없이 프로그램을 작성할 수 없다고 합니다...
그만큼 C언어의 꽃인 포인터...
어김없이 두서 없는 주절주절 시작합니다.
모든 프로그램에는 데이터를 표현하는데 두가지 방식이 있다고 합니다.
첫번째, 주소 내에 들어있는 메모리의 값 (value) 두번째, 주소
즉, 값(value)에는 위치정보와 실제 데이터 정보가 들어갈 수 있습니다.
두가지 방식이 있다고 해도, 컴퓨터 용어로는 둘다 값(value)라고 합니다.
어찌됬던 둘다 내용물이니까요...
하지만 C언어 그리고 다른 프로그래밍 언어에서는 둘을 구분합니다.
예를들어 int n = 10; 이라면 10은 데이터 값이며,
&n의 값은 데이터의 위치(주소)라고 할 수 있죠.
프로그래밍에서는 실제 정보의 데이터 값을 value라고 부르며,
실제 정보가 있는 위치 값 즉, 위치 주소가 들어있는 값을 reference(참조)라고 부릅니다.
컴퓨터 용어로는 둘다 value ...
프로그래밍 언어에서는 value와 reference...
그리고 그거 아십니까?
C언어에서는 reference(참조)를 포인터라고 부른다는 것을...
지금부터 포인터 수다를 떨어보도록 하죠.
주소가 들어있는 값을 참조라 부르며 C언어에서는 포인터라고 부릅니다...
그 포인터는 크기가 4 Byte를 넘지 않습니다.
물론 32 bit OS를 기준으로 말입니다.
왜냐하면 32 bit OS같은 경우 '2의 32승' 개의 주소를 갖게 되는데
32 bit의 끝주소는 바로 FFFFFFFF 입니다.
끝주소가 FFFFFFFF 라는 것은 주소들이 전부 저 크기를 초과하지 않는 다는 것이죠.
그리하여 메모리의 주소를 담는 변수인 포인터의 크기는 최대치인 4 byte를 넘지 않습니다.
따라서 포인터의 크기는 4 byte!
아무튼... 계속 말씀드리지만 포인터는 주소를 담는 메모리 공간의 이름을 말합니다!
쉽게 주소를 담는 변수...
정수에 값을 담을 때에는
int n;
n = 10;
이렇게 담으면 되지만,
주소를 담을 때는
int* p;
p = &n;
이렇게 해야된다는 사실!
*p는 주소에 *를 붙여 변수의 이름이 된다고 하였는데,
p에는 n이라는 변수의 주소가 담겨있으니...
이해가시죠?
/*
그림을 그리며 설명해드려야 쉬울듯 한데...
그림은 주말에 몰아서^^...
*/
참고로,
데이터의 담는 변수의 데이터 타입은
int char 등등이 있다면,
데이터가 담긴 변수의 주소를 담는 변수의 데이터 타입은
int* char* 등등이 있습니다.
그렇다는 것은 int != int* 라는 것이죠.
int* 라는 것은 엄연히 따지면 int 형 데이터를 담는 변수의 주소를 담는 데이터 타입입니다.
그렇다면 포인터의 장점은 무엇일까요?
바로 유연성이라고 볼 수 있습니다.
주소만을 가리키고 있기 때문에 가리키는 주소를 변경하면 메모리가 달라지죠...
더블포인터 같은 경우에는
int** pp;
이런식으로 쓰죠... 주소의 주소를 가리키는...
싱글 포인터와 같이 * 하나만 쓰지 못합니다.
왜냐하면 담고 있는 값 자체가 주소이다 보니 정수가 아니라 표현을 못하게 됩니다.
싱글포인터 * 의 경우는
'야 니꺼 623-044 번지에 있어!' 이렇게 끝난다면,
더블포인터 ** 의 경우는
'야 니꺼 623-066 번지로 우선 가봐.'
그래서 갔죠... 그런데 '야 623-044 번지에 있다' 이렇게 두번 주소가 쓰인다는 것이죠.
포인터긴하지만 달라요 엄연하게 ...
그말은 즉,
포인터같은 경우에는 주소를 한번 따라가야 값을 볼 수 있지만
더블 포인터 같은 경우에는 주소를 두번 따라가야 값을 볼 수 있게 된다는 거...
'삽질의 현장 > - C' 카테고리의 다른 글
곱씹어보자 C!_#010_ 삽잡이의 두서없이 막말하는 문자열(1) (0) | 2015.06.24 |
---|---|
곱씹어보자 C!_#009_ 삽잡이의 두서없이 막말하는 아스키코드 (0) | 2015.06.24 |
곱씹어보자 C!_#007_ 삽잡이의 두서없이 막말하는 제어문 반복문 (0) | 2015.06.23 |
곱씹어보자 C!_#006_삽잡이의 두서없이 막말하는 연산자들 (0) | 2015.06.23 |
곱씹어보자 C!_#005_ 삽잡이의 두서없이 막말하는 메모리와 데이터 (0) | 2015.06.23 |