-
배열 포인터 처리
[학습내용] [학습목표] ▪ 포인터 배열 기초
▪ 고급 포인터 배열 기술▪ 배열을 포인터 배열로 참조하는 방법을 구현할 수 있다.
▪ 구조체를 포인터 배열로 참조하는 방법을 구현할 수 있다.포인터 배열 기초
▪ 포인터 배열의 각 원소로 변수의 주소를 저장함
▪ 배열의 각 원소가 포인터형이므로, 원소가 가리키는 변수에 접근 하려면 배열의 원소 앞에 간접 참조 연산자 *를 사용해야 함
1. 1차원 포인터 배열
int a = 10, b = 20, c = 30, d = 40, e = 50; int* arr[5] = {&a, &b, &c, &d, &e}; //int 변수의 주소로 arr 배열의 원소를 초기화 함 int i; for( i = 0 ; i < 5 ; i++ ) printf(“%d”, *arr[i]) ; //arr[i]는 int*형이므로 간접 참조 연산자를 사용할 수 있음
int main(){ int a=1, b=3, c=5, d=7, e=9; int* arr[5] = {&a, &b, &c, &d, &e}; int i; for( i = 0 ; i < 5 ; i++ ) printf("%d", *arr[i]); printf("\n"); return 0; }
2. 2차원 포인터 배열
▪ 포인터 배열의 각 원소에 배열의 시작 주소를 저장
int x[3] = {1, 2, 3}; int y[3] = {4, 5, 6}; int z[3] = {7, 8, 9}; int* arr[3] = {x, y, z}; //포인터 배열의 원소를 int 배열의 시작 주소로 초기화 함
▪ arr[i]가 int 배열의 시작 주소로 초기화 되었을 때, arr[i]가 가리키는 배열의 원소에 접근하려면 arr[i][j]라고 씀
for( i = 0 ; i < 3 ; i++ ){ for( j = 0 ; j < 3 ; j++ ) printf(“&d”, arr[i][j]); //*(arr[i]+j)와 같은 의미 printf(“\n”); }
int main(void){ int x[3] = {1, 2, 3}; int y[3] = {4, 5, 6}; int z[3] = {7, 8, 9}; int* arr[3] = {x, y, z}; int i, j; for( i = 0 ; i < 3 ; i++ ){ for( j = 0 ; j < 3 ; j++) printf("%d ", arr[i][j]); printf("\n"); } return 0; }
고급 포인터 배열 기술
1. 구조체 포인터 배열
▪ 구조체 배열은 메모리를 많이 사용하므로 비효율적임
▪ 구조체 포인터 배열을 이용하면 구조체는 동적 메모리에 할당하고 그 주소만 포인터 배열에 넣어두고 사용할 수 있음
▪ 구조체 포인터 배열의 메모리 구조
STUDENT s1; STUDENT s2; STUDENT s3; STUDENT* std[3] = {&s1, &s2, &s3}; printf(“%s”, std[i] → name);
2. 2차원 배열 포인터 처리
행 단위 포인터 변수
int arr[3][5] = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 }, { 11, 12, 13, 14, 15 } }; int (*p)[5] = &arr[0]; //p를 int 5개 짜리 배열인 arr[0]의 주소로 초기화 함
배열에 대한 포인터와 이차원 배열
▪ 배열에 대한 포인터를 &arr[0]으로 초기화하는 대신, 간단하게 arr로 초기화할 수 있음
int (*p)[5] = arr; //arr는 &arr[0]과 같은 의미
▪ 배열에 대한 포인터를 &arr[0]으로 초기화하는 대신, 간단하게 arr로 초기화할 수 있음
int i, j; for ( i = 0 ; i < 3 ; i++ ){ for ( j = 0 ; j < 5 ; j++ ) printf(“%d”, p[i][j]); //p[i][j]는 이차원 배열의 원소 arr[i][j]를 의미 printf(“\n”) }
학습정리
1. 포인터 배열 기초
▪ 각 변수의 주소를 배열과 같이 묶어서 처리하는 것이 가능함
▪ 배열의 주소를 포인터 배열에 저장하면 2차원 배열과 같이 참조할 수 있음
2. 고급 포인터 배열 기술
▪ 구조체 포인터 배열은 구조체를 이용하는 것보다 메모리 사용 측면에서 더 효율적임
▪ 2차원 배열은 열 크기를 기준으로 포인터 변수를 선언할 수 있음
'Blog > JAVA기반 스마트웹 개발2021' 카테고리의 다른 글
프로그래밍 언어 활용 part 1 - 애플리케이션 구현 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 전처리기 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 스토리지 클래스 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 함수의 인자 (0) 2021.08.01 프로그래밍 언어 활용 part 1 - 공용체와 열거체 (0) 2021.07.31 댓글