티스토리 뷰

2021.03.03.수

포인터 배열과 배열 포인터
int *p_arr[3];

✔  포인터 배열 : 배열 요소로 포인터 변수를 가지는 배열을 의미. 즉, 포인터 변수를 저장할 수 있는 배열을 의미.

 

int (*arr_p)[3];

✔  배열 포인터 : 배열 포인터란 배열을 가리킬 수 있는 포인터를 의미.

✔  선언은 위와 같이 배열명 앞에 별(*)을 붙여 포인터임을 표시하고 괄호로 묶어 준다.

✔  괄호 없이 선언하게 되면 포인터 배열로 선언되므로 주의하자.

int arr[2][3] = {
  {10, 20, 30},
  {40, 50, 60}
};

int (*arr_p)[3] = arr;       // 배열 포인터의 선언   

printf("%d\n", arr[1][1]);   // 배열 이름으로 참조  	50
printf("%d\n", arr_p[1][1]); // 배열 포인터로 참조	50

✔  배열의 이름은 상수라는 점을 제외하면 포인터와 같이 주소를 의미한다.

✔  배열 포인터는 포인터를 배열처럼 사용하기 위해서 사용하며, 2차원 배열의 이름을 저장할 수 있다.

✔  따라서 배열 포인터는 1차원 배열에서는 의미가 없으며 2차원 이상의 배열에서만 의미를 가진다.

int (*pa)[4];

pa = &ary[0];
printf("배열 포인터에 ary[0] 주소를 저장, pa[0] 주소 출력 : %p\n",pa[0]);

pa = &ary[1];
printf("배열 포인터에 ary[1] 주소를 저장, pa[0] 주소 출력 : %p\n",pa[0]);

pa = &ary[2];
printf("배열 포인터에 ary[2] 주소를 저장, pa[0] 주소 출력 : %p\n",pa[0]);

✔  배열 포인터는 2차원 배열의 이름을 저장할 수 있다고 했는데

✔  더 정확히 말하자면 2차원 배열의 이름뿐만 아니라 2차원 배열의 부분 배열명까지도 저장할 수 있다고 볼 수 있다.

(예) 부분 배열명 arr[0], arr[1], arr[2] / 2차원 배열명은 arr[0]과 같은 주소를 가지므로 사용 가능

 

✔  배열 포인터는 저장된 주소를 2차원 배열이 시작되는 위치로 인지하므로 위와 같은 결과가 나온다.

✔  그리고 첨자를 사용해서 값에 접근하기 위해서 배열 포인터의 크기는 연결할 2차원 배열의 크기보다 작거나 같게 선언한다.


✔  앞서 정리했던 저장 공간과 값의 형태에 배열 포인터를 추가해서 재정리.

 

저장 공간 저장할 값의 형태 (예)
int형 변수 정수   int a = 10, b = 20 ;
int형 배열 int형 변수 / 정수   int arr1[3] = { a, b, 30 } ;
2차원 int형 배열   int arr2[2][3] = { 10, 20, 30, 40, 50 60 } ; 
포인터 변수 상수의 주소   int *p  = &arr[1];
이중 포인터 변수 포인터 변수의 주소   int **pp = &p;
포인터 배열 포인터 변수 / 주소값 상수   int *arr_p[3] = { &arr1[0], &arr1[1], &arr1[2]} ;
배열 포인터 2차원 배열명
2차원 배열의 부분 배열명
  int (*arr_p)[3] = arr2[0] ;

 

 

2차원 배열 요소의 의미

✔  개념적으로 2차원 배열의 요소는 1차원 배열이지만, 데이터는 1차원 배열의 요소가 저장된다.

✔  따라서 논리적으로는 2차원 배열의 요소는 1차원 배열이지만, 물리적으로는 1차원 배열의 요소들이다.

int arr[3][4];

✔  2차원 배열 arr의 논리적 배열 요소의 개수는 3개

✔  2차원 배열 arr의 물리적 배열 요소의 개수는 12개

 

 

 

 

[참고] 한빛미디어-혼자 공부하는 C언어 유튜브 강의 / 엘리스 트랙-혼자 공부하는 C언어 / 길벗-C언어 코딩 도장 / 위키백과 / TCP School

댓글
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
최근에 올라온 글
글 보관함
Total
Today
Yesterday