반응형
C언어 중급 개발자로 성장하려면, 포인터 배열과 다차원 배열의 개념을 정확히 이해해야 합니다.
이번 강의에서는 배열과 포인터의 관계를 넘어서, 2차원 배열을 포인터로 다루는 방법까지 깊이 있게 배워봅니다.
🧠 포인터 배열이란?
"포인터 배열"은 포인터를 원소로 갖는 배열입니다.
char *fruits[] = {"Apple", "Banana", "Cherry"};
✅ fruits는 문자열 주소를 원소로 가진 배열
✅ 각 원소는 문자열의 시작 주소 (즉, 포인터)
printf("%s\n", fruits[0]); // Apple
🔄 포인터 배열 vs 배열 포인터
개념 선언 예시 의미
포인터 배열 | int *arr[5]; | 포인터 5개를 가진 배열 |
배열 포인터 | int (*p)[5]; | 정수형 5개짜리 배열을 가리키는 포인터 |
int a[5];
int (*p)[5] = &a;
✅ (*p)[i]는 a[i]와 동일
🔢 2차원 배열 선언 및 사용
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
- matrix[0][0] → 1
- matrix[1][2] → 6
📍 2차원 배열의 메모리 구조
2차원 배열은 사실상 1차원 배열의 연속된 블록입니다.
int matrix[2][3];
→ 메모리는 int 크기 6개만큼 연속적으로 할당됨
*(*(matrix + 1) + 2) == matrix[1][2]
✅ 2중 포인터로 접근 가능
🔧 2차원 배열 출력 예제
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
💡 포인터를 이용한 2차원 배열 순회
int (*p)[3] = matrix; // 3개짜리 int 배열을 가리킴
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", p[i][j]);
}
}
✅ p[i][j]를 통해 2차원 배열처럼 사용 가능
🧪 포인터 배열 실습 예제: 문자열 목록 출력
char *menu[] = {"Burger", "Pizza", "Pasta"};
for (int i = 0; i < 3; i++) {
printf("%s\n", menu[i]);
}
🎯 실습 과제
- 3×3 정수형 2차원 배열을 선언하고 입력 받아 출력
- 포인터 배열을 이용한 문자열 목록 출력
- 배열 포인터를 사용해 2차원 배열의 합 구하기
📘 요약 정리
개념 설명
포인터 배열 | 포인터들을 저장하는 배열 |
배열 포인터 | 배열을 가리키는 포인터 |
2차원 배열 | 연속된 메모리 블록으로 구성 |
(*p)[n] | n개짜리 배열을 가리키는 포인터 |
🗣 다음 주 예고: 함수 포인터 – 함수도 주소를 가진다!
다음 시간에는 함수를 변수처럼 다루는 방법,
즉 함수 포인터에 대해 자세히 배워보겠습니다.
콜백 함수 구현의 기초가 될 강의, 절대 놓치지 마세요!
반응형
'C언어 > C 언어 중급' 카테고리의 다른 글
중급6강_C언어 문자열 함수 완전 정리 – 포인터로 문자열을 자유자재로 다루자! (0) | 2025.04.21 |
---|---|
중급5강_C언어 함수 포인터 완전정복 – 콜백 함수의 핵심 개념 쉽게 배우기! (0) | 2025.04.21 |
중급3강_C언어 동적 메모리 할당 완벽 가이드 – malloc부터 free까지 한 번에! (0) | 2025.04.20 |
중급2강_C언어 포인터와 배열, 문자열 완전 이해하기 – 메모리 접근의 핵심 원리! (0) | 2025.04.20 |
중급1강_C언어 포인터(Pointer) 완전 정복! 메모리 주소와 참조를 한 번에 이해하자 (0) | 2025.04.20 |