배열과 포인터
배열과 포인터는 유사한점이 있습니다.
- 차이점이 있다는 이야기겠죠?
그럼 보다 자세하게 알아보겠습니다.
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 |