■ 배열에 관한 이론정리는 생략 하도록 하겠습니다.

(1) 배열을 포인터로 접근하기
: 배열은 포인터와 밀접한관계를 가지고 있다.


[CODE]
#include<stdio.h>

void main()
{
   int arr[5];

   *arr = 10;
   printf("%d\n", A[0]);
}

[RESULT]
10

- "*arr = 10"의 의미는 "arr[0] = 10"과 같은 의미(arr이 가지고 있는 어드레스가 arr[0]의 어드레스이기 때문)


(2) 포인터 연산
: 포인터 연산을 통해 배열의 다른 인자로 접근할 수 있다.


[CODE]
#include<stdio.h>

void main()
{
   int var;
   int *p;

   *p = &var;

   printf("%d\n", p);
   p++;

   printf("%d\n", p);
}

[RESULT]
1245052
1245056

- 결과를 보면 int 타입의 변수이기 때문에 p++ 의 결과로 4바이트가 늘어난 것을 확인 할 수 있다. (+1의 의미는 1*타입크기)


(3) 배열과 포인터의 차이
: 포인터는 ++ 이나 + 1 연산이 가능 하지만, 배열자체의 연산은 불가능 하다.


[CODE]
#include<stdio.h>

void main()
{
   int arr[5];

   arr++;
   *arr = 10;

   printf("%d\n",arr[1]);
}

[RESULT]
error!!

- 배열 arr은 모조건 [0]번째 원소에 대한 어드레스만을 가지고 있다.
- [1], [2] 같은 다른 원소에 대한 위치 역시 [0]번째의 어드레스를 기반으로 해서 계산한다.
- 따라서 그 기반이 되는 arr의 어드레스 값은 절대 수정할 수 없다.
- (4)을 참고하자


(4) 포인터를 통한 배열 원소 접근


[CODE]
#include<stdio.h>

void main()
{
   int arr[5];

   *arr = 10;
   *(arr+1) = 20;
   *(arr+2) = 30;
   *(arr+3) = 40;
   *(arr+4) = 50;

   printf("%d %d %d %d %d\n",arr[0],arr[1],arr[2],arr[3],arr[4]);
}

[RESULT]
10 20 30 40 50

- 배열의 원소 arr[0] ~ arr[4]에 대한 접근은 포인터 연산을 써서 *(arr + 0) ~ *(arr + 4) 할 수 있다.
- 배열의 원소를 다루는 arr[n]형식 역시 내부적으로는 이러한 포인터 연산을 통해 이루어 지고 있는 것이다.

" 배열은 제한된 용도의 포인터 "



※ 참고자료 : http://2xx195.tistory.com/7

'P rogramming > C Language' 카테고리의 다른 글

문자열과 포인터 이론  (2) 2011.10.26
2차원 배열과 포인터 이론  (4) 2011.10.26
포인터 이론  (0) 2011.10.26
2차원 배열의 연산  (0) 2011.10.25
2차원 배열의 포인터  (0) 2011.10.25
by 민트앤라떼 2011. 10. 26. 11:11