사용하는 모든 변수는 메모리의 특정 위치에 저장되고 그 위치에 대한 메모리 주소를 포인터라고 한다.
포인터 변수는 주소값을 저장하는 특별한 변수다.
포인터 변수가 어떤 변수의 주소를 저장하고 있다는 것은 포인터 변수가 그 변수를 가리키고 있다( 포인트 하고 있다 ) 는 의미가 된다.
포인터 변수를 간단히 '포인터'라고 부르기도 한다.
다음과 같이 하면 포인터 변수를 사용하여 다른 변수를 액세스할 수 있다.
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 |