C언어 초급 - 8장: 배열과 문자열 (8.1 배열의 개념)

2025. 2. 23. 19:11프로그래밍 언어/C

8.1 배열의 개념

C 언어에서 배열(Array)같은 자료형의 여러 개의 데이터를 하나의 변수에 저장하는 자료구조입니다.
배열을 사용하면 반복문과 함께 효율적으로 데이터를 관리할 수 있으며, 메모리에서 연속적으로 저장되는 구조를 가집니다.


1. 1차원 배열의 선언 및 초기화

1.1 배열 선언

배열을 선언하는 기본 문법은 다음과 같습니다.

자료형 배열이름[배열크기];

📌 배열의 크기(배열크기)는 반드시 정수여야 하며, 선언 후 크기를 변경할 수 없음.

1.2 배열 선언 예제

#include <stdio.h>

int main() {
    int numbers[5];  // 정수형 배열 선언 (5개의 요소 저장 가능)

    return 0;
}

📌 설명

  • int numbers[5]; → 크기가 5인 정수형 배열 선언.
  • 배열의 요소 개수는 5개이며, 각각 numbers[0] ~ numbers[4]로 접근 가능.

1.3 배열 초기화

배열 선언과 동시에 초기값을 설정할 수 있습니다.

int numbers[5] = {10, 20, 30, 40, 50};  // 초기값 설정

📌 초기화하지 않으면 배열 요소에는 쓰레기 값(알 수 없는 값)이 저장됨.


1.4 배열 초기화 방법

#include <stdio.h>

int main() {
    int numbers1[5] = {10, 20, 30, 40, 50}; // 모든 요소를 초기화
    int numbers2[5] = {1, 2};  // 앞 2개만 초기화하고 나머지는 0
    int numbers3[5] = {0};  // 모든 요소를 0으로 초기화
    int numbers4[] = {10, 20, 30};  // 크기 자동 설정 (3개)

    printf("numbers1[2] = %d\n", numbers1[2]); // 30 출력
    printf("numbers2[4] = %d\n", numbers2[4]); // 0 출력
    printf("numbers3[3] = %d\n", numbers3[3]); // 0 출력
    printf("numbers4[1] = %d\n", numbers4[1]); // 20 출력

    return 0;
}

출력 결과

numbers1[2] = 30
numbers2[4] = 0
numbers3[3] = 0
numbers4[1] = 20

📌 배열 크기를 생략하면 자동으로 크기 결정 (numbers4[])
📌 초기화되지 않은 요소는 0 또는 쓰레기 값(미정의 값)을 가질 수 있음


2. 배열의 메모리 구조

배열의 요소는 연속적인 메모리 주소에 저장됩니다.
따라서 배열의 첫 번째 요소의 주소를 기준으로, 다음 요소들은 자료형 크기만큼 주소가 증가합니다.


2.1 배열의 메모리 구조 예제

#include <stdio.h>

int main() {
    int arr[5] = {10, 20, 30, 40, 50};

    printf("배열의 메모리 주소 확인\n");
    for (int i = 0; i < 5; i++) {
        printf("&arr[%d] = %p\n", i, &arr[i]);
    }

    return 0;
}

출력 예시

배열의 메모리 주소 확인
&arr[0] = 0x7ffee3b3d9c0
&arr[1] = 0x7ffee3b3d9c4
&arr[2] = 0x7ffee3b3d9c8
&arr[3] = 0x7ffee3b3d9cc
&arr[4] = 0x7ffee3b3d9d0

📌 설명

  • int 자료형은 보통 4바이트를 차지함.
  • 각 배열 요소의 메모리 주소는 4씩 증가.
  • &arr[0]을 보면 배열의 첫 번째 요소가 저장된 주소를 확인 가능.

2.2 배열을 이용한 데이터 처리

배열을 활용하여 여러 데이터를 손쉽게 처리할 수 있습니다.

예제 – 배열을 사용한 평균 계산

#include <stdio.h>

int main() {
    int scores[5] = {80, 90, 78, 92, 88}; // 학생 5명의 점수
    int sum = 0;
    double avg;

    for (int i = 0; i < 5; i++) {
        sum += scores[i]; // 총합 계산
    }

    avg = (double)sum / 5; // 평균 계산
    printf("평균 점수: %.2f\n", avg);

    return 0;
}

출력 결과

평균 점수: 85.60

📌 설명

  • 배열을 사용하면 반복문을 활용하여 데이터 처리가 쉬워짐.
  • sum += scores[i]; → 반복문을 사용하여 총합을 구함.
  • (double)sum / 5; → 정수형 sum을 double로 변환하여 정확한 평균 계산.

3. 배열과 반복문

배열은 반복문과 함께 사용하면 효율적인 데이터 처리가 가능합니다.

3.1 사용자 입력을 통한 배열 값 설정

#include <stdio.h>

int main() {
    int values[5];

    printf("5개의 정수를 입력하세요: ");
    for (int i = 0; i < 5; i++) {
        scanf("%d", &values[i]);
    }

    printf("입력한 값 출력: ");
    for (int i = 0; i < 5; i++) {
        printf("%d ", values[i]);
    }

    return 0;
}

실행 예시

5개의 정수를 입력하세요: 1 2 3 4 5
입력한 값 출력: 1 2 3 4 5

📌 설명

  • 배열을 사용하여 사용자로부터 여러 개의 값을 입력받고 출력할 수 있음.
  • 반복문을 활용하면 scanf와 printf를 반복적으로 호출할 필요 없음.

4. 정리

개념  설명 예제
배열 선언 같은 자료형의 여러 개의 데이터를 저장 int arr[5];
배열 초기화 배열을 선언하면서 초기값 설정 int arr[5] = {1, 2, 3, 4, 5};
크기 생략 초기화 배열 크기를 자동으로 설정 int arr[] = {10, 20, 30};
메모리 구조 배열 요소는 연속적인 메모리 주소에 저장 &arr[i]
반복문 활용 배열의 요소를 반복문으로 처리 for (int i = 0; i < 5; i++)

📌 배열은 같은 자료형의 여러 데이터를 연속적으로 저장
📌 배열의 크기는 선언 후 변경 불가능
📌 배열 요소는 0번 인덱스부터 시작
📌 반복문과 함께 사용하면 데이터를 쉽게 처리 가능