Programming Language/C, C++

C 배열과 포인터

MOLOKINI 2014. 10. 10. 12:58

배열과 포인터

 

배열과 포인터는 유사한점이 있습니다.

 - 차이점이 있다는 이야기겠죠?

 

그럼 보다 자세하게 알아보겠습니다.

 

char a[4];

 

위의 선언문은 a라는 이름으로 4개의 char형(정수형 1byte) 데이터를 저장할 수 있는 기억공간을 만들어라 라는 것입니다.

 - 각각의 공간에 a[0], a[1], a[2], a[3]의 기억공간이 만들어집니다. (다 아시죠?)

더 정확하게 말씀드리자면

 

 

1. a라는 이름의 주소번지를 담을 수 있는 공간이 만들어짐

2. 메모리 내 빈 공간을 찾아 char 형의 데이터를 저장할 수 있는 연속된 4개의 공간 확보

3. 연속된 4개의 기억장소의 첫번째 주소번지를 이전에 만들어 놓았던 a라는 기억장소에 저장

 

위 내용 중 1번은 완전히 포인터 선언을 이야기하고 있죠?

유사합니다, 하지만 차이점은 2번과 3번입니다.

 

이제, a에는 연속된 4개의 기억공간의 첫번째 주소번지를 가지고 있으므로 *a에는 연속된 4개의 기억공간의 첫번째 char 형을 담을 수 있는 공간이 되겠습니다. 그 다음은 *(a+1)이 되겠고요

 

 

이렇습니다.

 

이런 접근도 가능합니다.

 

&* 이 등장해서 많이 당황하셨을겁니다.

하지만, 차근차근 생각해보면 위 그림에서 설명한것과 마찬가지로

pX : 주소번지를 담을 수 있는 포인터

x : int형 4개의 기억공간을 갖는 배열 변수의 주소번지를 갖고 있음

*x : x의 첫번째 기억공간

&*x : x의 첫번째 기억공간의 주소

pX : x의 첫번째 기억공간의 주소를 담고 있음

 

따라서,

&* 없이도 가능합니다.

앞서 설명드린 그림과 함께 보시면 이해가 빠르실겁니다.

 - 배열의 앞자는 첫번째 기억공간의 주소를 가리키고 있습니다.

 

pX는 x의 주소를 가리켰고 같은 기억공간을 가지고 있다는 것을 알 수 있습니다.

'Programming Language > C, C++' 카테고리의 다른 글

C++ 네임스페이스  (0) 2014.10.10
C++ 인라인 함수  (0) 2014.10.10
C 포인터  (0) 2014.10.10
C 삼항연산자  (0) 2014.10.09
C 비트연산자  (0) 2014.10.09