전에는 계속 기본 자료형의 변수를 요소로 지니는 배열만 선언했지만
오늘은 포인터 변수로 배열을 선언하는 것에 대해 알아보겠습니다.
포인터 변수로 이뤄진, 그래서 주소 값의 저장이 가능한 배열을 가리켜 포인터 배열이라고 하며
선언방식은 다음과 같습니다.
int * arr1[20]; // 길이가 20인 int형 포인터 배열 arr1
int * arr2[30]; // 길이가 30인 double형 포인터 배열 arr2
#include <stdio.h>
int main(void) {
int num1 = 10, num2 = 20, num3 = 30;
int * arr[3] = {&num1, &num2, &num3};
printf("%d \n", *arr[0]);
printf("%d \n", *arr[1]);
printf("%d \n", *arr[2]);
return 0;
}
10
20
30
이렇듯 포인터 배열도 기본 자료형 배열과 별반 다르지 않다. 다만 주소 값을 저장할 수 있도록
포인터 변수를 대상으로 선언된 배열일 뿐이다.
문자열을 저장하는 포인터 배열
이번에는 문자열 배열을 저장하는 포인터 배열을 설명하고자 하며 이는 문자열의 주소 값을 저장할 수 있는
배열로 사실상 char형 포인터 배열이다.
char * strArr[3]; // 길이가 3인 char형 포인터 배열
위의 선언에서 보이듯이, char형 포인터 배열은 문자열의 주소 값을 저장할 수 있는 배열이다 보니
문자열 배열로 불릴 뿐이다.
#include <stdio.h>
int main(void) {
char * strArr[3] = {"Simple", "String", "Array"};
printf("%s \n", strArr[0]);
printf("%s \n", strArr[1]);
printf("%s \n", strArr[2]);
return 0;
}
Simple
String
Array
위 4행에는 문자열 배열이 선언되어있다 여기서 알 수 있는 사실은
큰 따음표로 묶여서 표현되는 문자열은 그 형태에 상관없이 메모리 공간에 저장된 후 그 주소 값이 반환된다
라는 사실이다.
즉 위 문장이 실행되면 초기화 리스트에 선언된 문자열들은 메모리 공간에 저장되고,
그 위치에 저장된 문자열의 주소 값은 반환된다.
따라서 문자열이 저장된 이후에는 다음의 형태가 된다.
char * strArr[3] = {0x1004, 0x1048, 0x2012}; // 반환된 주소 값은 임의로 지정
그런데 반환된 주소 값은 문자열의 첫 번째 문자의 주소 값이니, 이렇듯 char형 포인터 배열에 저장이 가능한 것이다.
'프로그래밍 > C, C++' 카테고리의 다른 글
[C언어]다차원 배열(2차원, 3차원 배열) (0) | 2023.08.26 |
---|---|
[C언어]함수의 인자로 배열 전달하기 (0) | 2023.08.25 |
[C언어]포인터와 배열 (0) | 2023.06.01 |
[C언어]포인터 (0) | 2023.05.30 |
[C언어]배열 (0) | 2023.05.28 |
댓글