포인터 배열과 배열 포인터
2019. 11. 13. 16:23ㆍPL/C++
포인터 배열과 배열 포인터은 비슷한 느낌을 주지만 분명히 다른 표현이다
선언 자체에서 다른데, 포인터 배열은 포인터가 여러 개 포함된 배열을 의미한다. 배열 포인터는 배열을 지칭하는 포인터로 보면 된다
포인터 배열은 int *p[3]과 같이 int *p[0], int *p[1], int *p[2] int형 자료형의 주소를 가리킬 수 있는 포인터 변수가 3개 있는 것을 알 수 있다. 배열 포인터는 포인터 배열과 선언이 유사한데 소괄호를 붙인다는 점에서 다르다. 즉 int (*p)[3]처럼 선언을 하는데 이는 int 형 배열의 크기를 3을 갖는 배열의 시작 주소를 가리키게 된다
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
void init_arr(int (*arr)[2]) { | |
int i, j, cnt = 1; | |
for(i=0; i<3; i++) { | |
for(j=0; j<2; j++) { | |
arr[i][j] = cnt++; | |
} | |
} | |
} | |
void print_arr(int (*arr)[2]) { | |
int i, j; | |
for(i=0; i<3; i++) { | |
for(j=0; j<2; j++) { | |
printf("arr[%d][%d] = %d\n", i, j, arr[i][j]); | |
} | |
} | |
} | |
void init_pnt_arr(int **pnt_arr, int (*arr)[2]) { | |
int i; | |
for(i=0; i<3; i++) { | |
pnt_arr[i] = arr[i]; | |
} | |
} | |
void test_arr_pnt(int (*p)[3]) { | |
int i, j; | |
for(i=0; i<2; i++) { | |
for(j=0; j<3; j++) { | |
printf("p[%d][%d] = %d\n", i, j, p[i][j]); | |
} | |
} | |
} | |
void test_arr_func(int (*p)[2]) { | |
printf("**p = %d\n", **p); | |
printf("*(*p+1) = %d\n", *(*p+1)); | |
printf("*(*p+3) = %d\n", *(*p+3)); | |
printf("**(p+1) = %d\n", **(p+1)); | |
printf("**(p+2) = %d\n", **(p+2)); | |
} | |
void test_p_func(int (*p)[3]) { | |
printf("**p = %d\n", **p); | |
printf("*(*p+1) = %d\n", *(*p+1)); | |
printf("*(*p+2) = %d\n", *(*p+2)); | |
printf("**(p+1) = %d\n", **(p+1)); | |
printf("*(*(p+1)+2) = %d\n", *(*(p+1)+2)); | |
} | |
int main(void) { | |
int i; | |
int arr[3][2] = {0}; | |
int *pnt_arr[3] = {0}; // 포인터 배열 | |
int (*p)[3] = NULL; // 배열 포인터 | |
init_arr(arr); | |
print_arr(arr); | |
init_pnt_arr(pnt_arr, arr); | |
for(i=0; i<3; i++) { | |
printf("*pnt_arr[%d] = %d\n", i, *pnt_arr[i]); | |
} | |
p = arr; | |
test_arr_pnt(p); | |
test_arr_func(arr); | |
test_p_func(p); | |
return 0; | |
} |
'PL > C++' 카테고리의 다른 글
함수포인터 (0) | 2019.11.13 |
---|---|
함수포인터가 쓰이는 경우 (0) | 2019.11.13 |
malloc/free와 new/delete 차이 (0) | 2019.11.12 |
cin으로 방어적 프로그래밍 (0) | 2019.10.31 |
std::array와 std::vector 차이 (0) | 2019.10.30 |