1. 포인터 변수로 이루어진 배열
포인터 변수도 일반적인 변수로 인식하는것이 중요하다.
포인터 배열은 포인터 변수로 이뤄진 배열이다.
int * arrptr[3]; //int형 포인터 변수3개로 이뤄진 1차원 배열 선언
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> int main(void) { int n1, n2, n3; int* arrPtr[3]={&n1, &n2, &n3}; int i; for(i=0; i<3; i++) { printf("숫자 입력: "); scanf("%d", arrPtr[i]); } printf("입력된 숫자의 총 합은 %d 입니다 \n", *arrPtr[0] + *arrPtr[1] + *arrPtr[2]); return 0; } | cs |
1 2 3 4 | 숫자 입력: 1 숫자 입력: 2 숫자 입력: 3 입력된 숫자의 총 합은 6 입니다 | cs |
6행에서 int형 포인터 배열을 선언하면서 n1,n2,n3의 주소 값으로 배열을 초기화했다.
12행에서 arrPtr[0], arrPtr[1], arrPtr[2] 가 의미하는것은 변수 n1, n2, n3의 주소 값이다.
그래서 굳이 & 연산자를 붙이지 않아도 된다.
2. 3가지 형태의 문자열 배열
1) 2차원 배열 기반의 문자열 배열
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int main(void) { char stArr[3][9]={ "Hello2", "Business", "Pet" }; int i; for(i=0; i<3; i++) printf("문자열 %d: %s \n", i+1, stArr[i]); return 0; } | cs |
1 2 3 | 문자열 1: Hello2 문자열 2: Business 문자열 3: Pet | cs |
13행에서 배열에 저장된 문자열을 반복문으로 활용해 출력했다.
2) 포인터 기반의 문자열 배열 1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int main(void) { char str1[]="Hello"; char str2[]="Business"; char str3[]="Pet"; char* stArr[3]={str1, str2, str3}; int i; for(i=0; i<3; i++) printf("문자열 %d: %s \n", i+1, stArr[i]); return 0; } | cs |
1 2 3 | 문자열 1: Hello 문자열 2: Business 문자열 3: Pet | cs |
5~7행 문자열의 길이에 딱 맞는 배열을 선언하고 있다.
5~6행의 배열의 이름이 첫번째 배열 요소의 주소 값이므로
9행에서 str1, str2, str3를 초기화 하고 있다.
3) 포인터 기반의 문자열 배열 2
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main(void) { char* stArr[3]={"Hello", "Business", "Pet"}; int i; for(i=0; i<3; i++) printf("문자열 %d: %s \n", i+1, stArr[i]); return 0; } | cs |
1 2 3 | 문자열 1: Hello 문자열 2: Business 문자열 3: Pet | cs |
앞서본 예제와 다른것은 5행에서 문자열을 저장할 메모리 공간을 별도로 선언 안했다.
메모리 공간에 상수의 형태로 문자열을 선언하고, 그 주소 값이 배열에 저장된다.
4) 어떤 문자열 배열을 쓸까?
총 3가지 문자열 배열 선언방식을 설명했는데,가장 보편적인 선언 방식은 2차원 배열 기반의 문
자열 배열이다. 왜냐하면 어느정도의 메모리 공간의 낭비는 있지만 선언 및 활용이 용이하다.
그러나 이정도의 메모리 낭비도 문제가 된다면 포인터 기반의 문자열 배열 2 번을 사용하자.
하지만 이 모델은 문자열이 상수의 형태로 존재하게 된다는 단점이 있다.
결국 메모리의 효율성도 고려하고, 문자열도 변수의 행태를 취해야한다면 구현에 다소 불편함
은 있지만 포인터 기반의 문자열 배열 1번을 사용하자.
'BackEnd > C' 카테고리의 다른 글
배열의 이름은 상수 형태의 포인터이다. (0) | 2019.03.13 |
---|---|
제한된 형태의 포인터 연산 (0) | 2019.03.13 |
포인터의 포인터 (0) | 2019.03.13 |
문자열 배열과 문자열을 참조하는 포인터 (0) | 2019.03.12 |
&연산자가 반환하는것은? (0) | 2019.03.12 |