본문 바로가기

Programming/C Language

포인터

사용하는 모든 변수는 메모리의 특정 위치에 저장되고 그 위치에 대한 메모리 주소를 포인터라고 한다.
포인터 변수는 주소값을 저장하는 특별한 변수다.
포인터 변수가 어떤 변수의 주소를 저장하고 있다는 것은 포인터 변수가 그 변수를 가리키고 있다( 포인트 하고 있다 ) 는 의미가 된다.
포인터 변수를 간단히 '포인터'라고 부르기도 한다.


다음과 같이 하면 포인터 변수를 사용하여 다른 변수를 액세스할 수 있다.

int i;                                    //정수형 변수 i 선언

int *ptr = &i;                        // 포인터 변수 ptr에 i의 주소값 저장


포인터 선언은 다음과 같이 한다.


자료형 * 포인터 변수명;

1)자료형은 포인터 변수 자체의 자료형이 아니라 포인터 변수에 저장할 주소에 있는 일반 변수의 자료형이다.

2)포인터변수 이름은 일반 변수이름과 구별하여 변수이름 앞에 * 를 표시하여 포인터 변수임을 나타낸다.

ex)     char *ptr;        shor * ptr;            int * ptr;

순서대로 char형 변수 , short형 변수 , int형 변수의 주소를 저장하는 포인터 변수로 ptr에 저장된 메모리 주소로부터 각 자료형의 크기의 데이터를 액세스한다.


포인터 연산에는 두가지가 있다.
주소 연산자 '&' 와 참조 연산자 '*'이 있다.


주소연산자 &

주소연산자 &는 변수의 주소를 얻는데 사용한다.    즉 , 변수 앞에 주소 연산자를 사용하면 그 변수의 주소를 사용할 수 있다.
포인터변수 = & 변수;


참조연산자 *

포인터 변수에는 일반 변수의 주소가 저장되지만 , 포인터 변수에 참조 연산자 (*)를 사용하면 저장된 주소에 있는 값 ( 변수에 저장된 값 ) 을 액세스 할 수 있다.

*포인터변수  = 값;


참조 연산자를 사용하면 지정한 값을 포인터가 가리키고 있는 주소에 저장할 수 있고 , 
다음과 같이 사용하면 포인터가 가리키는 주소에 있는 값을 변수에 저장할 수 있다.

변수 = *포인터변수;



실행 결과 :
i의 값 : 10

i의 메모리 주소(&i) = 7338116

j의 메모리 주소(&j) = 7338104


 << ptr = &i 실행 >>


 ptr의 메모리 주소(&ptr) = 7338092

 ptr의 값(ptr) = 7338116

 ptr의 참조값(*ptr) = 10

 << ptr = &j 실행 >>


 ptr의 메모리 주소(&ptr) = 7338092

 ptr의 값(ptr) = 7338104

 ptr의 참조값(*ptr) = 20

 << i=*ptr 실행 >>

 i의 값: 20

'Programming > C Language' 카테고리의 다른 글

C 정리2  (0) 2018.05.26
C 정리1  (0) 2018.05.26
Data Structure 배열  (0) 2017.11.29
내용 보충  (0) 2017.11.09
반복문 예제  (0) 2017.11.08