포인터 배열의 이해
포인터 변수로 이뤄진, 그래서 주소 값의 저장이 가능한 배열을 가리켜 '포인터 배열'이라 한다.
이러한 배열의 선언방식은 다음과 같다.
int* arr1[20]; // 길이가 20인 int형 포인터 배열 arr1
double* arr2[30]; // 길이가 30인 double형 포인터 배열 arr2
포인터 배열의 선언방식은 기본 자료형 배열의 선언방식과 동일하다.
배열의 이름 앞에 배열요소의 자료형 정보를 선언
#include <stdio.h>
int main(void)
{
int num1 = 10, num2 = 20, num3 = 20;
int* arr[3] = { &num1, &num2, &num3 };
printf("%d \n", *arr[0]);
printf("%d \n", *arr[1]);
printf("%d \n", *arr[2]);
return 0;
}
변수 num1, num2, num3의 관계를 그림으로 표현
포인터 배열도 기본 자료형 배열과 별반 다르지 않다.
다만, 주소 값을 저장할 수 있도록 포인터 변수를 대상으로 선언된 배열
문자열을 저장하는 포인터 배열
문자열의 주소 값을 저장할 수 있는 배열 → 사실상 char형 포인터 배열
char* strArr[3]; // 길이가 3인 char형 포인터 배열
char형 포인터 배열은 문자열의 주소 값을 저장할 수 있는 배열이다 보니 문자열 배열로 불림
#include <stdio.h>
int main(void)
{
char* strArr[3] = { "Hey", "fuxx", "you" };
printf("%s \n", strArr[0]);
printf("%s \n", strArr[1]);
printf("%s \n", strArr[2]);
}
- "큰따옴표로 묶여서 표현되는 문자열들은 메모리 공간에 저장되고, 그 위치에 저장된 문자열의 주소 값이 반환된다"
char* strArr[3] = {0x1004, 0x1048, 0x2012}; // 반환된 주소는 임의로 결정
반환된 주소 값을 문자열의 첫 번째 문자의 주소 값이니, 이렇듯 char형 포인터 배열에 저장이 가능
int형 포인터 배열의 그림과 비교해 보면, 구조적으로 차이가 없음
포인터 배열은 가리키는 대상의 차이는 있지만, 다른 메모리 공간을 가리킨다는 점에서는 동일.
참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C' 카테고리의 다른 글
포인터와 함수에 대한 이해(14-2) Call-by-value vs Call-by-reference (0) | 2020.12.08 |
---|---|
포인터와 함수에 대한 이해(14-1) 함수의 인자로 배열 전달하기 (0) | 2020.12.08 |
포인터와 배열! 함께 이해하기(13-3) 상수 형태의 문자열을 가리키는 포인터 (0) | 2020.12.08 |
포인터와 배열! 함께 이해하기(13-2) 포인터 연산 (0) | 2020.12.08 |
포인터와 배열! 함께 이해하기(13-1) 포인터와 배열의 관계 (0) | 2020.12.07 |