본문/내용
2. 포인터 형
프로그램에서 선언된 변수명은 기억장소에 대한 이름이기 때문에 다른 변수명으로 같은 장소를 참조할 수 없다. 그러나 만약 변수의 주소를 값으로 취할 수 있다면, 동일 주소를 값으로 갖는 변수들은 주소의 값으로 같은 장소를 참조할 수 있다.
기억장소의 주소를 값으로 취하는 변수를 포인터 변수(pointer variable)라 한다. 변수는 특정한 자료형에 관계되기 때문에 포인터 변수 또한 특정한 자료형에 연루된다. 포인터 변수는 자료형이 다른 변수의 주소를 값으로 가질 수 없다. 이처럼 특정한 자료형을 값으로 갖는 기억장소의 주소를 값으로 하는 자료형을 포인터 형(pointer type)이라고 한다.
* <변수명> /* 포인터형 변수선언 */
&<변수명> /* 변수의 주소 추출 */
*은 자료형에 대한 포인터 형이다.
변수명의 주소추출은 &(ampersand) 연산자를 변수명 앞에 수식하면 된다. 이때 변수의 포인터형과 주소가 추출되는 변수명의 자료형은 동일해야 한다.
int *p; /* 정수형 포인터 변수 p 선언 */
int i;
p=&i; /* 추출된 변수명 i의 주소가 p에 배정 */
위에서 p는 정수형 주소를 값으로 갖는 변수로서 정수형 변수 i의 주소가 addr라 할 때 p=&i는 다음 그림과 같다.
& 연산자는 배열명, 레지스터 변수, 상수와 수식에 대해서 사용할 수 없다. 예를 들어 C에서 배열<배열며> []로 선언되는데 <배열명>은 메모리에서 배열의 시작주소이다. 이 경우 배열의 원소에 대한 주소의 추출이 가능하다.
int *i;
int a[10];
i=&a[5]; /* 배열의 5 번째 원소의 주소 추출 */
포인…