C Prog. with Java
포인트라는 것을 알았으니, 포인트를 이용해서 배열을 조작해보록 합시다.
우선 소스를 보고 시작할게요.
위의 소스는 int형과 double 타입의 배열을 선언한뒤, 그 각각의 요소에 포인터를 배정했습니다.
그리고 포인터를 찍어서, 배열 요소 각각의 주소를 찍어 보았더니, 위의 색칠한 부분처럼 int형은 4씩 주소가 늘어난 것이 확인되었고, double형은 8씩 늘어난 것을 확인할 수 있었습니다.
이 부분을 미루어 볼때, 배열의 각 요소의 포인터 값은 선언된 배열의 형의 사이즈에 맞게 값이 증가된 것을 볼 수 있습니다. (참고로 int형의 사이즈는 4바이트, double형의 사이즈는 8바이트입니다. 노파심에 사이즈 찍어드립니다.)
이를 확인 하셨다면, 다음을 봅시다.
포인터도 연산이 가능합니다. 자세한 설명보다 우선 소스를 보면서 이해를 합시다.
포인터에 1을 더해주는 연산을 하였습니다. 결과를 살펴보면 주소값이 4가 늘어난 것을 확인할 수 있군요.
그렇습니다. 위의 과정을 보셨으면, 알아채신 분들이 계실겁니다.
포인터에 연산을 해주게 되면, 그 주소값이 변수의 선언된 형(Type)의 크기에 맞게 늘어난 것을 확인 할 수 있습니다.
이를 배열에 접목시킨다면, 배열의 각 요소를 가리키고 있는 포인터가 역시 동일한 형태로 증가됨을 보았을때, 이런 연산을 통해서 배열의 요소를 접근하고 제어할 수 있겠습니다. 설명보다 결과를 보는게 이해가 더 빠르겠군요.
자, 포인터를 통해서 배열의 요소를 출력해보았습니다.
배열의 요소가 int 사이즈대로 4바이트 간격을 두고 주소값을 배정받고 있기 때문에, 위처럼 연산을 했을 경우,
원하는 결과값을 얻을 수 있었습니다.
참고로, A[0]의 주소값과 배열의 주소값이 동일하기 때문에 포인터를 설정한 부분을 다음과 변형 가능합니다.
배열의 이름은 곧 A[0]의 주소값, 즉 포인터와 동일하다고 생각하시면 됩니다.
그래서 arr[i]와 *(arr + i)가 동일한 문장이라고 볼 수 있겠습니다.(여기서 i는 인덱스입니다.)
이처럼 포인터 연산을 통해서 배열에 접근을 해보았는데요. 알아될 것은 다음과 같이 정리 가능합니다.
1. 포인터는 연산이 가능하다.
2. 포인터에서 가능한 연산자는 덧셈과 뺄셈만 존재한다.
3. 포인터가 연산자에 의해서 증감할 때, 이의 값(주소)을 결정짓는 것은 포인터형이다.
포인터에 있어서 배열 사용의 기초적인 내용입니다. 꼭 알아둡시다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어 with Java] malloc, calloc & free, 힙 메모리 할당과 해제! (1) | 2012.11.16 |
---|---|
[C언어 with Java] typedef, 타입에 새로운 이름을 부여하자. (2) | 2012.11.16 |
[C언어 with Java] 간단히 포인터에 대해서 알아봅시다. (0) | 2012.11.15 |
[C언어 with Java] 배열에 대해서 알아보자. (0) | 2012.10.31 |
[C언어 with Java] 메소드의 선언 (0) | 2012.10.31 |