포인터 : 메모리의 주소 값(시작 주소)을 저장하기(가리키기) 위한 4바이트 변수
(참고 : 포인터의 크기가 4바이트인 이유는 32비트 컴퓨터의 주소체계가 32비트(4바이트)이기 때문이다)
포인터 선언 :
int *pa; // int형의 pa 이름의 포인터
(참고 : 변수명에 포인터임을 나타내기 위해 접두사로 포인터의 약자 p를 붙인다.
ex. 변수 a를 가리키기 위한 포인터 : pa)
즉, int 형 변수의 메모리 주소를 가리키는 pa 포인터 (따라서 시작주소로부터 4바이트까지 참조한다)
주소 연산( & , * ) :
& : 주소값
* : 해당주소의 값 참조
예)
1. int i = 5;
2. int *pi = &i;
3. printf("%d %d", i, &i);
4. printf("%d %d %d", pi, &pi, *pi);
<메모리 상태>
설명 :
1번째줄 : int i 이므로 int 형의 i 변수가 메모리에 할당한다.
int 이므로 4바이트의 메모리가 할당된다.(0012FF60 ~ 0012FF63 메모리 주소)
4바이트에 걸쳐 5가 저장된다. (즉, 0012FF60 만 참고하면 5라는 숫자를 얻을수 없다)
2번째줄 : int *pi 이므로 int 형의 변수를 가리키는 포인터 pi 변수를 메모리에 할당한다.
포인터이므로 4바이트의 메모리가 할당된다.(0012FF54 ~ 0012FF57 메모리 주소)
int *pi = &i 이므로 포인터 pi 변수에 변수 i 의 메모리 시작주소 0012FF60을 저장한다.
포인터 pi 는 int 형이므로 값을 참조할 때 0012FF60 부터 4바이트를 더해 0012FF63까지 참조한다.
3번째줄 : printf("%d %d", i, &i);
실행결과 : 5 0012FF60
i 의 값은 5이므로 5가 출력된다.
&i 는 i 의 주소값을 의미하므로 0012FF60 이 출력된다.
4번째줄 : printf("%d %d %d", pi, &pi, *pi);
실행결과 : 0012FF60, 0012FF54, 5
pi 의 값은 pi = &i 였으므로 i 의 주소값 0012FF60 이 출력된다.
&pi 의 값은 pi 의 주소값을 의미하므로 0012FF54 가 출력된다.
*pi 의 값은 pi 가 가진 값을 참조하는데 pi 는 int 형 포인터 이므로 pi 가 가진값 0012FF60 부터 4바이트
즉, 0012FF60 ~ 0012FF63 까지를 참조하여 5가 출력된다.
'Language > _C' 카테고리의 다른 글
1차원 배열(Array) (2) | 2010.05.04 |
---|---|
반복문 (for, while) (0) | 2010.03.25 |
분기문 ( if, if - else, switch ) (0) | 2010.03.20 |
자료형, 상수, 변수, 연산자 (1) | 2010.03.16 |
C Hello World 출력 (3) | 2010.03.13 |