포인터 사용법
포인터란 메모리상의 주소 값을 가리키는 변수이다.
이해하기 난해하며 사용하기도 참 어렵다.
잘못 사용하면 프로그램이 종료되는 일도 발생할 수 있어 사용하는데 항상 주의를 기울여야 한다.
포인터를 이해 하려면 우선적으로 컴퓨터의 메모리 구조 이해가 필수적이며
여러분의 이해를 돕고자 포인터의 low level 부터 설명 하도록 하겠다.
메모리 구조 |
포인터를 이해하려면 메모리 구조를 먼저 파악해야 된다.
아래와 같이 빈 메모리 공간이 있다고 가정하자.
위의 메모리는 0x0001 ~ 0x0008 까지 주소를 가지고 있으며 각 주소당 1byte 데이터 공간을 가지고 있다.
이제 위의 메모리에 다음과 같이 변수를 선언했다고 가정하자.
int value = 10; |
이제 메모리가 어떻게 변했는지 살펴 보겠다.
int는 4byte의 공간을 차지 하기 때문에 0x0001~0x0004까지 공간을 value가 할당하여 쓰고 있으며 값은 10이 저장된다.
그렇다면 위에서 할당받은 value의 시작 주소는 무엇일까?
value의 시작 주소는 위의 그림에서 보면 0x0001인 것을 알 수 있다.
그러므로 value의 시작 주소는 0x0001이며 이것을 표현하는 것은 &value 라 한다.
int value = 10; printf("&value: %d \n", &value ); //는 0x0001이 출력 된다. |
자 이제 포인터 변수를 하나 선언 하도록 하겠다.
포인터 표현 방식은 변수명에 *을 하나 붙여 주면 되며 포인터는 항상 주소 값만 갖는다.
또한 포인터는 4byte만 할당 받도록 되어 있다.
int value = 10; int* pValue = &value; |
위와 같이 pValue에는 value의 주소값인 0x0001이 할당 된다.
아래의 결과는 어떻게 될까?
printf("pValue[%d] *pValue[%d] \n", pValue, *pValue ); |
pValue -> 주소 값 |
결과는 pValue 주소 값이므로 0x0001이며 *pValue는 주소를 가리키는 변수의 값 즉 value의 값인 10을 나타낸다.
전체 예제는 다음과 같습니다.
#include <stdio.h> int main() { int nValue = 10; int* pValue = &nValue; printf("pValue[%d] *pValue[%d] \n", pValue, *pValue ); return 0; } |
'프로그램 > C' 카테고리의 다른 글
[C] 시간차이 구하기 ( millisecond 까지.. ) (0) | 2017.07.16 |
---|---|
[C] 포인터 자료형 (0) | 2017.07.13 |
[C] 배열 사용법 (0) | 2017.03.22 |
[C] goto 제어문 사용법 (0) | 2017.03.18 |
[C]switch 제어문 사용법 (0) | 2017.03.17 |