< 배열 포인터와 포인터 배열 - 1> 한번에 모두 다루기엔 많아서 나눠서 포스팅 할 계획입니다. 참고해주세요~ 배열 포인터와 포인터 배열 - 1 ; 배열 포인터의 기본적인 개념 배열 포인터와 포인터 배열 - 2 ; 포인터 배열의 기본적인 개념 배열 포인터와 포인터 배열 - 3 ; 배열 포인터, 포인터 배열의 추가 예시, 설명 # 우선 배열포인터와 포인터 배열의 표현법을 보겠습니다. - 배열 포인터: int(*p)[5] = a; >> 5개 묶음 배열의 포인터
- 포인터 배열: int* p[5]; >> 포인터 5개 묶음 도대체 이 두개가 어떻게 다른건지 감이 잘 안오실 수도 있습니다. # 포인터의 기본적인 부분부터 다시 되집어보면 이렇습니다. int형 변수 a1을 가리키는 포인터를 정의하는 방법: int a1; → int* p = &a1; int형 1차원 배열 a2를 가리키는 포인터를 정의하는 방법: int a2[5]; → int* p = a2; (배열명은 주소이기 때문에 배열에 대한 포인터를 정의할 때는 &가 필요없죠!) # 그렇다면, 아래와 같이 정의된 a3라는 int형 2차원 배열은 포인터를 어떻게 정의하면 좋을까요? int a3[3][5] 1번) int* p = a3; 2번) int(*p)[5] = a3; 각각의 경우에 대해 천천히 따져봅시다. 1번) int* p = a3; 이 경우에는 p가 int형 포인터가 됩니다. 그래서 p가 1씩 증가할 때마다 가리키는 주소는 int의 크기만큼 (여기서는 4) 증가합니다. p = &a3 p+1 = &a3 + 4 p+2 = &a3 + 8
2번) int(*p)[5] = a3; 이 경우에는 p가 1씩 증가할 때마다 가리키는 주소는 int의 크기의 5배 만큼 (여기서는 20) 증가합니다. [5]로 p가 가리키는 주소가 sizeof(int)*5씩 증가하도록 지정을 해준 것이죠. p = &a3 p+1 = &a3 + 20 p+2 = &a3 + 40 이러한 것을 바로 배열 포인터라고 합니다. a3라는 2차원 배열에서 a3의 한 원소는 int 5개 만큼의 크기를 가지고 있으니 포인터도 그에 따라 주소를 가리키라고 컴퓨터에게 알려주는거죠! # 그렇다면, 아래와 같이 정의된 a3라는 char형 2차원 배열은 포인터를 어떻게 정의하면 좋을까요? int형에 대해서 말고 char형에 대해서도 예시를 볼까요? 이번에도 차근차근 짚어봐요~ char형 변수 b1을 가리키는 포인터를 정의: char b1; → char* p = &b1; char형 1차원 배열 b2를 가리키는 포인터를 정의: char b2[5]; → char* p = b2; (여기서도 마찬가지로 배열명은 주소이기 때문에 배열에 대한 포인터를 정의할 때는 &가 필요없죠!) char형 2차원 배열 b3를 가리키는 포인터를 정의: char b3[3][10]; → char(*p) [10] = b3; >> 배열포인터 p = &b3 p+1 = &a3 + 10 p+2 = &a3 + 20 배열 포인터는 2차원 배열에 대해서 포인터가 가리키는 주소를 사용자가 의도한 대로 지정할 수 있게 하는 역할을 한다고 정리할 수 있겠네요~ 추후 내용 수정/추가 가능하니 의견 있으면 남겨주세요! |
Engineering/C언어-기초 개념
- (C언어) 배열 포인터와 포인터 배열 -1 2016.05.03
(C언어) 배열 포인터와 포인터 배열 -1
2016. 5. 3. 15:33