카테고리 없음

배열과 구조체: C 언어의 기초 자료구조 이해하기

devgodmj 2024. 10. 21. 21:26

 

프로그래밍에서 배열구조체는 데이터를 효율적으로 저장하고 관리하기 위한 중요한 자료구조입니다. 이번 포스팅에서는 배열과 구조체의 개념을 설명하고, C 언어에서 이 두 자료구조를 어떻게 사용하는지 알아보겠습니다.


1. 배열이란 무엇인가?

배열은 같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다. 배열의 각 데이터는 인덱스를 통해 접근할 수 있으며, 인덱스는 0부터 시작합니다. 배열은 정해진 크기로 선언되며, 한 번 선언된 배열의 크기는 변경할 수 없습니다.

배열의 특징:

  • 동일한 자료형: 배열은 같은 자료형의 데이터로만 구성됩니다.
  • 연속된 메모리 공간: 배열의 각 요소는 메모리 상에서 연속적으로 저장됩니다.
  • 인덱스를 통한 접근: 배열의 요소는 인덱스(첨자)를 통해 접근합니다.

배열의 선언 예시:

int arr[10]; // 크기가 10인 정수형 배열 선언

이 배열은 10개의 정수 데이터를 저장할 수 있으며, 인덱스를 통해 각각의 값에 접근할 수 있습니다.

배열의 사용 예시:

for (int i = 0; i < 10; i++) {
    arr[i] = i * 2; // 배열에 값 할당
}

 

2. 구조체란 무엇인가?

구조체는 서로 다른 자료형의 데이터를 하나로 묶어 관리하는 사용자 정의 자료형입니다. 배열이 동일한 자료형만 저장할 수 있는 반면, 구조체는 여러 다른 자료형을 하나의 단위로 묶어 효율적으로 관리할 수 있습니다.

구조체의 선언 예시:

struct Student {
    char name[50];
    int age;
    float grade;
};

 

위 예시는 학생 정보를 저장하기 위한 구조체로, name, age, grade와 같은 서로 다른 자료형의 데이터를 하나로 묶을 수 있습니다.

구조체의 사용 예시:

struct Student student1;
student1.age = 20;
strcpy(student1.name, "Alice");
student1.grade = 3.8;

구조체는 선언한 이후, 각 멤버에 접근하여 값을 저장하거나 수정할 수 있습니다.


3. 배열과 구조체의 차이점

  • 배열은 같은 자료형을 가진 데이터들의 집합으로, 동일한 자료형을 저장할 수 있는 반면, 구조체서로 다른 자료형을 묶어 데이터를 관리할 수 있습니다.
  • 배열은 연속된 메모리 공간을 차지하며, 각 요소는 인덱스를 통해 접근합니다. 반면 구조체는 논리적으로 연관된 데이터를 하나로 묶어, 각 멤버 변수에 이름으로 접근할 수 있습니다.

배열과 구조체의 조합:

배열과 구조체는 함께 사용할 수 있습니다. 예를 들어, 여러 학생의 정보를 저장하기 위해 구조체 배열을 사용할 수 있습니다.

struct Student students[10]; // 크기가 10인 구조체 배열 선언

이 배열은 10명의 학생 정보를 저장할 수 있으며, 각 학생의 이름, 나이, 성적과 같은 정보를 저장할 수 있습니다.

 

4. 배열과 포인터의 관계

배열의 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용됩니다. 배열의 각 요소는 메모리 상에서 연속적으로 저장되므로, 배열 이름에 인덱스를 더해 주소를 계산할 수 있습니다.

예시:

int arr[5] = {10, 20, 30, 40, 50};
printf("%d\n", *(arr + 2)); // 30 출력

 

위 코드에서 arr + 2는 배열의 세 번째 요소의 주소를 가리키며, *(arr + 2)는 해당 주소에 저장된 값을 출력합니다.

 

5. 응용 예제: 배열의 데이터 처리

배열의 평균 계산:

배열을 사용하여 여러 값을 입력받고, 그 중 평균을 계산하는 프로그램을 작성할 수 있습니다.

#include <stdio.h>

double avg(int arr[], int size) {
    int sum = 0;
    for (int i = 0; i < size; i++) {
        sum += arr[i];
    }
    return (double)sum / size;
}

int main() {
    int arr[5] = {10, 20, 30, 40, 50};
    printf("평균: %.2f\n", avg(arr, 5));
    return 0;
}