해당 글은 개인 공부 정리를 위해 작성되었습니다.
포인터 배열
포인터 배열 : 배열 요소로 포인터 변수를 가지는 배열을 의미합니다. 즉, 포인터 변수로 이루어진 '배열'을 의미합니다.
포인터 배열은 기본 자료형 배열과 크게 다르지 않습니다. 다만 주소값을 저장할 수 있는 포인터 변수를 대상으로 선언된 배열일 뿐입니다.
선언 방법 : 자료형 * 배열명[크기]
#include <stdio.h>
int main(void)
{
int num1 = 1, num2 = 2, num3 = 3;
int * arr[3] = { &num1, &num2, &num3 }; // 포인터 배열 선언 및 초기화
printf("주소값 : %p %p %p\n", arr[0], arr[1], arr[2]);
printf("값 : %d %d %d\n", *arr[0], *arr[1], *arr[2]);
return 0;
}
문자열 배열은 문자열의 주소값을 저장하는 배열로서 사실 char형 포인터 배열입니다.
" " (큰 따옴표)로 묶인 문자열은 메모리 공간에 저장된 후 그 주소값이 반환됩니다. 그리고 저장된 메모리 공간의 시작 주소를 알려줍니다.
반환된 문자열의 주소값은 문자열 첫번째 문자의 주소입니다. 이렇게 char형 포인터 배열에 저장이 가능합니다.
#include <stdio.h>
int main(void)
{
char * strarr[3] = {"sejong", "university", "computer"}; // 문자열 배열 선언 및 초기화
printf("%s %s %s\n", strarr[0], strarr[1], strarr[2]);
return 0;
}
배열 포인터
배열 포인터란 배열을 가리킬 수 있는 '포인터'를 의미합니다.
1차원 배열은 이름 자체가 포인터이기 때문에 배열 포인터가 필요없습니다. 하지만 2차원 배열은 이름 자체로 포인터의 역할을 할 수 없습니다.
배열 포인터를 사용하는 이유는 2차원 이상의 배열을 가리킬 때 포인터를 배열처럼 사용하기 위함입니다.
따라서 배열 포인터는 2차원 이상의 배열에서만 의미를 가집니다.
선언 방법 : 자료형 (*포인터변수명)[가로(행)길이]
#include <stdio.h>
int main(void)
{
int arr2d[2][3] = {
{10, 20, 30},
{40, 50, 60},
};
int (*arrPtr)[2] = arr2d;
printf("%d %d\n", (*arrPtr)[0], (*arrPtr)[1]);
return 0;
}
포인터 배열(Array of Pointer)과 배열 포인터(Pointer to Array)는 비슷해 보입니다.
- 포인터 '배열'은 주소값들을 저장하는 '배열'입니다.
- 배열 '포인터'는 배열의 시작주소값을 저장할 수 있는 '포인터'입니다.
'프로그래밍 언어 > c(일반)' 카테고리의 다른 글
포인터(4) - 함수 포인터 & 사용 예시 정리 (0) | 2024.07.12 |
---|---|
포인터(3) - 포인터&배열 함수인자 전달 (0) | 2024.07.12 |
extern 구조체 또는 변수 사용법 및 예시 (0) | 2024.05.08 |
static 정적 변수 (0) | 2024.05.07 |
삼항 연산자 (0) | 2024.05.06 |