본문 바로가기
Programing_Language/C

포인터(Pointer)

by neohtux 2016. 9. 8.
728x90

□ 포인터는 변수의 메모리 주소를 저장하는 변수다


변수는 메모리 상의 저장 공간이므로 그 위치(주소)를 알면 사용할 수 있다.



□ 주소 연산자(&)

프로그램이 사용하는 메모리에는 바이트별로 주소값이 있다. 이 값은 0부터 시작하고 바이트 단위로 1씩 증가하므로


2바이트 이상의 크기를 갖는 변수는 여러 개의 주소값에 걸쳐 할당된다.


예를 들어 변수 a가 메모리 100번지부터 할당되었다면 100번지부터 103번지까지 4바이트에 걸쳐 할당된다.



주소는 변수가 할돵된 메모리 공간의 시작 주소를 사용


주소 연산자(&)의 사용법 예제



포인터는 주소를 저장하는 변수로 일반 변수와 마찬가지로 선언한 후에 사용한다.


선언하는 방법은 변수 앞에 *만 붙여주면 된다.






간접참조 연산자(*) 예제)




*pa == num    ① num이 가리키는 변수 a를 구함


&*pa==&num ② 다시 변수 num의 주소를 구함


포인터에 간접참조 연산자를 사용한 결과는 가리키는 변수와 완전히 같습니다.



□ const를 사용한 포인터


 - 포인터에 const를 사용하면 가리키는 변수의 값을 바꿀 수 없습니다.


가운데 그림에서 보면


출력 결과에서 pa는 const의 사용과는 무관하게 변수 b의 주소를 저장하고 그 값을 간접참조하여 출력한다.

그렇다면 포인터에 사용된 const의 의미는 무엇일까?

 - 바로 pa가 가리키는 변수 a는 pa를 간접참조하여 바꿀수 없다는 것이다. (코드 15행)

 만약 const로 선언되어있는 포인터를 간접참조하여 바꾸려면 맨 아래 그림과같은 오류가 발생한다.






300x250

댓글