- 포인터는 변수의 주소를 말하며, C언어에서는 주소를 제어할 수 있는 기능을 제공한다.
- C언어에서 변수의 주소를 저장할 때 사용하는 변수를 포인터 변수라 한다.
- 포인터 변수를 선언할 때는 자료의 형을 먼저 쓰고 변수명 앞에 간접 연산자 를 붙인다.(int a;)
- 포인터 변수에 주소를 저장하기 위해 변수의 주소를 알아낼 때는 변수 앞에 번지 연산자 &를 붙인다.(a = &b;)
- 실행문에서 포인터 변수에 간접 연산자 를 붙이면 해당 포인터 변수가 가리키는 곳의 값을 말한다.(c= a;)
- 포인터 변수는 필요에 의해 동적으로 할당되는 메모리 영역인 힙 영역에 접근하는 동적 변수이다.
- 포인터 변수의 용도
- 연결된 자료 구조를 구성하기 위해 사용한다.
- 동적으로 할당된 자료 구조를 지정하기 위해 사용한다.
- 배열을 인수로 전달하기 위해 사용한다.
- 문자열을 표현하기 위해 사용한다.
- 커다란 배열에서 요소를 효율적으로 저장하기 위해 사용한다.
- 메모리에 직접 접근하기 위해 사용한다.
- 예를 들어, a 변수에 100을 저장시키고, a 변수의 주소를 포인터 변수 b에 기억시켰다면 다음 그림과 같이 표현하고 말할 수 있다.
- a는 메모리의 4번지에 대한 이름이다.
- a 변수의 주소는 4다.
- a 변수에는 100이 기억되어 있다.
- 4번지에는 100이 기억되어 있다.
- &a는 a 변수의 주소를 말한다. 즉 &a는 4다.
- 포인터 변수 b는 a 변수의 주소를 기억하고 있다.
- 포인터 변수가 가리키는 곳의 값을 말할 때는 *을 붙인다.
- *b는 b에 저장된 주소가 가리키는 곳에 저장된 값을 말하므로 100이다.
- 배열을 포인터 변수에 저장한 후 포인터를 이용해 배열의 요소에 접근할 수 있다.
- 배열 위치를 나타내는 첨자를 생략하고 배열의 대표명만 지정하면 배열의 첫 번째 요소의 주소를 지정하는 것과 같다.
- 배열 요소에 대한 주소를 지정할 때는 일반 변수와 동일하게 & 연산자를 사용한다.
int a[5],*b; b = a → 배열의 대표명을 적었으므로 a 배열의 시작 주소인 a[0]의 주소를 b에 저장한다. b = &a[0] → a 배열의 첫 번째 요소인 a[0]의 주소(&)를 b에 저장한다.
- a[0] = *(a+0)