본문 바로가기
C언어/C 언어 중급

중급4강_C언어 포인터 배열과 2차원 배열 완전정복 – 메모리 구조 깊이 파헤치기!

by AI쌤 2025. 4. 21.
반응형

 

 

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]);
}

🎯 실습 과제

  1. 3×3 정수형 2차원 배열을 선언하고 입력 받아 출력
  2. 포인터 배열을 이용한 문자열 목록 출력
  3. 배열 포인터를 사용해 2차원 배열의 합 구하기

📘 요약 정리

개념 설명

포인터 배열 포인터들을 저장하는 배열
배열 포인터 배열을 가리키는 포인터
2차원 배열 연속된 메모리 블록으로 구성
(*p)[n] n개짜리 배열을 가리키는 포인터

🗣 다음 주 예고: 함수 포인터 – 함수도 주소를 가진다!

다음 시간에는 함수를 변수처럼 다루는 방법,
함수 포인터에 대해 자세히 배워보겠습니다.
콜백 함수 구현의 기초가 될 강의, 절대 놓치지 마세요!

반응형