Backend/C

포인터(pointer)란 무엇인가?

petitCoding 2012. 4. 12. 10:25

포인터(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 : }

 

<결과화면>

 


 

반응형