본문 바로가기

카테고리 없음

C의 배열과 문자열

C 언어에서 배열과 문자열은 데이터 집합을 다루기 위해 중요한 역할을 합니다. 배열은 같은 데이터 타입의 요소들을 저장하는 자료구조이며, 문자열은 문자들의 배열로 특수한 형태의 배열입니다. 배열과 문자열의 사용과 관련된 다양한 개념을 상세히 설명하겠습니다.

1. 배열 (Arrays)

배열은 동일한 데이터 타입을 가진 여러 개의 요소를 연속적으로 저장하는 자료구조입니다. 배열의 크기는 선언 시에 지정해야 하며, 크기는 변경할 수 없습니다.

배열의 선언과 초기화

선언

c
코드 복사
int arr[5]; // 정수형 배열, 5개의 요소를 가짐

초기화

c
코드 복사
int arr[5] = {1, 2, 3, 4, 5}; // 배열 초기화

배열의 크기를 생략하면 초기화된 값의 개수에 따라 자동으로 크기가 결정됩니다.

c
코드 복사
int arr[] = {1, 2, 3, 4, 5}; // 크기 자동 결정 (5)

배열 요소 접근

배열의 요소에 접근할 때는 인덱스를 사용합니다. 배열의 인덱스는 0부터 시작합니다.

c
코드 복사
#include <stdio.h> int main() { int arr[5] = {10, 20, 30, 40, 50}; printf("첫 번째 요소: %d\n", arr[0]); // 출력: 10 printf("세 번째 요소: %d\n", arr[2]); // 출력: 30 // 배열의 모든 요소 출력 for (int i = 0; i < 5; i++) { printf("arr[%d] = %d\n", i, arr[i]); } return 0; }

2. 다차원 배열

C 언어는 1차원 배열뿐만 아니라 2차원 이상의 배열도 지원합니다.

2차원 배열 선언과 초기화

c
코드 복사
int matrix[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

2차원 배열 요소 접근

c
코드 복사
#include <stdio.h> int main() { int matrix[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; printf("matrix[1][2] = %d\n", matrix[1][2]); // 출력: 7 // 2차원 배열의 모든 요소 출력 for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { printf("matrix[%d][%d] = %d\n", i, j, matrix[i][j]); } } return 0; }

3. 문자열 (Strings)

문자열은 문자(char)의 배열로, 문자열의 끝을 나타내는 널 종단 문자 '\0'가 필요합니다. C 언어에서는 문자열을 다루기 위해 <string.h> 헤더 파일에 다양한 함수를 제공합니다.

문자열 선언과 초기화

문자열 선언과 초기화

c
코드 복사
char str1[] = "Hello, World!"; // 문자열 초기화 char str2[20] = "Hello"; // 크기를 명시하고 초기화

문자열의 끝을 나타내는 널 문자

문자열의 끝은 널 문자 '\0'로 표시됩니다. 배열의 마지막에 자동으로 추가됩니다.

문자열 처리 함수

문자열 처리에 자주 사용되는 함수들:

  • strlen: 문자열의 길이를 반환합니다.
  • strcmp: 두 문자열을 비교합니다.
  • strcpy: 문자열을 복사합니다.
  • strcat: 문자열을 연결합니다.

문자열 처리 함수 예제

c
코드 복사
#include <stdio.h> #include <string.h> int main() { char str1[20] = "Hello"; char str2[] = "World"; // 문자열 길이 printf("str1의 길이: %lu\n", strlen(str1)); // 문자열 복사 strcpy(str1, str2); printf("복사 후 str1: %s\n", str1); // 문자열 연결 strcat(str1, "!"); printf("연결 후 str1: %s\n", str1); // 문자열 비교 if (strcmp(str1, str2) == 0) { printf("str1과 str2는 같습니다.\n"); } else { printf("str1과 str2는 다릅니다.\n"); } return 0; }

문자열 배열

문자열 배열은 여러 문자열을 저장할 수 있는 배열입니다. 이 배열은 배열의 배열로 구현됩니다.

문자열 배열 예제

c
코드 복사
#include <stdio.h> int main() { char strings[3][20] = { "Hello", "World", "Programming" }; // 문자열 배열의 모든 요소 출력 for (int i = 0; i < 3; i++) { printf("strings[%d] = %s\n", i, strings[i]); } return 0; }

4. 문자열과 배열의 관계

문자열은 사실상 문자 배열이므로 배열의 인덱스를 사용하여 각 문자를 접근할 수 있습니다.

문자 배열을 문자열로 처리

c
코드 복사
#include <stdio.h> int main() { char str[] = "Example"; // 문자열의 각 문자 출력 for (int i = 0; str[i] != '\0'; i++) { printf("문자 %d: %c\n", i, str[i]); } return 0; }

5. 메모리에서의 배열과 문자열

배열은 메모리 상에서 연속적인 공간에 저장됩니다. 문자열도 같은 방식으로 메모리에 저장되며, 문자열의 끝을 나타내는 널 문자 '\0'가 있어야 합니다. 배열의 크기는 컴파일 타임에 결정되며, 배열의 크기를 초과하여 접근하면 정의되지 않은 동작이 발생할 수 있습니다.