null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
1차원 배열
#c
#c-lang
#beginner
#arrays
#1d-array
@devpc
|
2026-03-29 05:33:44
|
GET /api/v1/nodes/36?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 1차원 배열 ## 배열이란? **같은 자료형의 데이터를 연속된 메모리에 저장**하는 자료구조입니다. 인덱스(번호)로 각 요소에 접근합니다. ```c // 배열 없이: 변수 5개 따로 선언 int s1 = 85, s2 = 92, s3 = 78, s4 = 96, s5 = 88; // 배열 사용: 한 번에 관리 int scores[5] = {85, 92, 78, 96, 88}; ``` --- ## 배열 선언과 초기화 ### 선언 ```c int arr[5]; // int 타입, 5개 원소 double nums[10]; // double 타입, 10개 원소 char chars[26]; // char 타입, 26개 원소 ``` > ⚠️ 초기화하지 않으면 **쓰레기 값**이 들어있습니다. ### 초기화 ```c int arr[5] = {10, 20, 30, 40, 50}; // 일부만 초기화 → 나머지는 자동으로 0 int arr2[5] = {1, 2}; // {1, 2, 0, 0, 0} // 크기 자동 결정 int arr3[] = {1, 2, 3}; // 크기가 3으로 결정됨 // 전체를 0으로 초기화 int arr4[5] = {0}; // {0, 0, 0, 0, 0} ``` --- ## 인덱스로 접근 인덱스는 **0부터 시작**합니다. ```c int scores[5] = {85, 92, 78, 96, 88}; //인덱스: 0 1 2 3 4 printf("%d\n", scores[0]); // 85 (첫 번째) printf("%d\n", scores[4]); // 88 (마지막) scores[2] = 100; // 값 변경 printf("%d\n", scores[2]); // 100 ``` --- ## 배열 순회 (for 반복문) ```c int arr[5] = {10, 20, 30, 40, 50}; int size = 5; // 출력 for (int i = 0; i < size; i++) { printf("arr[%d] = %d\n", i, arr[i]); } // 합계 int sum = 0; for (int i = 0; i < size; i++) { sum += arr[i]; } printf("합계: %d\n", sum); ``` --- ## 배열 크기 구하기 ```c int arr[] = {1, 2, 3, 4, 5}; int size = sizeof(arr) / sizeof(arr[0]); // sizeof(arr) = 전체 바이트 수 (20) // sizeof(arr[0]) = 원소 하나의 바이트 수 (4) // 20 / 4 = 5 printf("배열 크기: %d\n", size); // 5 ``` --- ## 범위 초과 주의 (Out of Bounds) C언어는 배열 범위를 **자동으로 검사하지 않습니다.** 범위를 벗어나면 정의되지 않은 동작(UB)이 발생합니다. ```c int arr[5] = {0}; arr[5] = 10; // ❌ 인덱스 5는 존재하지 않음 (0~4) arr[-1] = 10; // ❌ 음수 인덱스도 불가 // 항상 0 <= i < 크기 범위를 지켜야 합니다 ``` --- ## 배열과 함수 배열을 함수에 전달할 때는 **배열의 주소와 크기**를 함께 전달합니다. ```c #include <stdio.h> // 배열 이름 자체가 첫 번째 원소의 주소 void print_array(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } double average(int arr[], int size) { int sum = 0; for (int i = 0; i < size; i++) sum += arr[i]; return (double)sum / size; } int main() { int scores[] = {85, 92, 78, 96, 88}; int n = sizeof(scores) / sizeof(scores[0]); print_array(scores, n); printf("평균: %.1f\n", average(scores, n)); return 0; } ``` --- ## 예제: 최댓값/최솟값 찾기 ```c #include <stdio.h> int main() { int arr[] = {34, 67, 12, 89, 45, 23, 78}; int size = sizeof(arr) / sizeof(arr[0]); int max = arr[0], min = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] > max) max = arr[i]; if (arr[i] < min) min = arr[i]; } printf("최댓값: %d\n", max); // 89 printf("최솟값: %d\n", min); // 12 return 0; } ``` ---
// COMMENTS
ON THIS PAGE