포인터(pointer)란 무엇인가?
C 프로그램에서 변수를 선언할 때 컴파일러는 변수를 저장하기 위해 유일하게 구분되는 주소의 메모리 영역을 할당한다. 컴파일러는 변수의 이름을 특정 주소에 연결시킨다.
주소 : 1000 1002 1003 1004 1005 - -- - - - - -
값 : 40 55
변수 : a b
a와 b 라는 이름의 변수가 선언되고 각각 40, 55의 값으로 초기화 되었다.
그럼 포인터는 무엇일까?
예를 들어,
int *p; 이라는 포인터형 변수를 선언해 보자. 이것은 int형의 어떤 변수를 가리킬 수 있는 포인터이다. 포인터 선언은 위와 같이
typename *ptrname;
의 형식으로 선언된다. 또한 포인터는 아래와 같이 일반적인 변수와 함께 선언될 수 있다.
int *p , a, b ;
자, 그럼 이 포인터가 어떠한 변수를 가리키도록 하려면 어떻게 선언을 해 주어야 할까
p = &a;
이렇게 해주면, 변수 p가 변수 a의 주소값을 가지도록 해 주는 문장이 완성된다.
여기서 p의 값은 a의 주소 값이 되고, *p의 값은(즉 p가 가리키는 주소 안의 값은) a의 값, 즉 40이 되는 것이다.
기본적인 예제를 살펴보기로 하자.
<소스코드>
1 : #include <stdio.h>
2 : void main(){
3 : int *p, a;
4 : a = 40;
5 : p = &a;
6 : printf("p = %d\n", p); //p의 값
7 : printf("&a = %d\n", &a); //a의 주소값
8 : printf("&p = %d\n", &p); //p의 주소값
9 : printf("*p = %d\n", *p); //p가 가리키는 곳의 값
10 : printf("a = %d\n", a); //a의 값
11 : }
<결과화면>
'Backend > C' 카테고리의 다른 글
Segmentation Fault (0) | 2012.04.12 |
---|---|
함수 인수로 사용되는 포인터 (0) | 2012.04.12 |
Call by value & call by reference (0) | 2012.04.12 |
문자열의 길이를 계산하는 두 가지 방법 (0) | 2012.04.12 |
argc, argv를 이용한 간단한 사칙연산. (0) | 2012.04.12 |