C에서 배열을 함수 인자로 전달하기
안녕하세요, 미래의 코딩 슈퍼스타! ? 오늘 우리는 C의 세계에서 배열과 함수를 통해 흥미로운 여정을 떠납니다. 너의 친구 이웃 컴퓨터 과학 교사로서, 저는 이 모험을 단계별로 안내해드릴 것입니다. 그러니 가상의 배낭을 챙기고, 함께 빠져들어 보세요!
배열과 함수 이해하기
배열을 함수에 전달하기 전에, 먼저 배열과 함수에 대해 간단히 기억을 새기겠습니다.
배열이란?
배열은 학교 복도에 있는.locker 줄을 생각해보세요. 각.locker(要素)는 번호(인덱스)가 있으며, 안에 무언가를 보관할 수 있습니다. C에서는 배열을 사용하여 동일한 유형의 여러 항목을 단일 변수에 저장합니다.
함수란?
함수는 주 프로그램 내에 있는 미니 프로그램입니다. 특정 작업을 수행하는 지시 세트입니다. 책 속 레시피 카드를 생각해보세요 - 특정 작업을 수행해야 할 때마다 사용할 수 있습니다.
이제 기본 개념을 다시 확인했으므로, 두 개념을 어떻게 결합할 수 있는지 탐구해 보겠습니다!
배열을 함수 인자로 전달하기
C에서는 배열을 다양한 방법으로 함수에 전달할 수 있습니다. 하나씩 살펴보겠습니다.
1. 호출 시 값 전달 방법으로 배열 전달
C에서 배열을 함수에 전달할 때, 실제로는 배열의 첫 번째 요소의 주소를 전달하고 있습니다. 이는 함수 내에서 배열에 대한 변경이 원래 배열에 영향을 미친다는 것을 의미합니다.
예제를 보겠습니다:
#include <stdio.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
printf("Original array: ");
printArray(myArray, size);
return 0;
}
이 예제에서 우리는 myArray
를 printArray
함수에 전달하고 있습니다. 전체 배열을 전달하는 것처럼 보이지만, 실제로는 첫 번째 요소의 포인터를 전달하고 있습니다.
출력:
Original array: 1 2 3 4 5
2. 호출 시 참조 전달 방법으로 배열 전달
C에서는 배열이 항상 참조로 전달됩니다. 즉, 배열을 함수에 전달할 때, 실제로는 배열의 첫 번째 요소의 포인터를 전달하고 있습니다.
다음 예제에서는 함수 내에서 배열을 변경하는 예제를 보여드리겠습니다:
#include <stdio.h>
void doubleElements(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}
int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);
printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");
doubleElements(myArray, size);
printf("Modified array: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");
return 0;
}
이 예제에서 doubleElements
함수는 원래 배열의 각 요소를 두 배로 변경합니다.
출력:
Original array: 1 2 3 4 5
Modified array: 2 4 6 8 10
3. 2차원 배열을 함수에 전달하기
이제 2차원 배열을 함수에 전달하는 것에 대해 이야기해보겠습니다. 이는 단일 행 대신 전체 스프레드시트를 전달하는 것과 같습니다!
다음 예제를 보겠습니다:
#include <stdio.h>
void print2DArray(int rows, int cols, int arr[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main() {
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
printf("My 2D Array:\n");
print2DArray(3, 3, myArray);
return 0;
}
이 예제에서 우리는 2D 배열을 print2DArray
함수에 전달하고 있습니다. 함수 매개변수에서 차원을 지정해야 합니다.
출력:
My 2D Array:
1 2 3
4 5 6
7 8 9
4. 문자열 길이 비교 함수
마지막으로, 문자열(문자 배열)을 함수에 전달하는 방법을 살펴보겠습니다. 두 문자열의 길이를 비교하는 함수를 만들어보겠습니다.
#include <stdio.h>
#include <string.h>
int compareStringLengths(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 > len2) return 1;
if (len1 < len2) return -1;
return 0;
}
int main() {
char string1[] = "Hello";
char string2[] = "World!";
int result = compareStringLengths(string1, string2);
if (result > 0) {
printf("%s is longer than %s\n", string1, string2);
} else if (result < 0) {
printf("%s is longer than %s\n", string2, string1);
} else {
printf("%s and %s have the same length\n", string1, string2);
}
return 0;
}
이 예제에서 우리는 두 문자열을 compareStringLengths
함수에 전달하고 있습니다. 함수는 첫 번째 문자열이 더 길면 1을 반환하고, 두 번째 문자열이 더 길면 -1을 반환하며, 길이가 같으면 0을 반환합니다.
출력:
World! is longer than Hello
결론
축하합니다! 배열을 함수에 전달하는 방법을 배워서 C 프로그래밍 기술을 한 단계 업그레이드했습니다. 연습이 완벽을 이루는 열쇠이므로, 이 개념들을 자신의 프로그램에서 실험해 보지 않으시면 안 됩니다.
여기서 다루었던 방법의 빠른 참조 표입니다:
방법 | 설명 |
---|---|
호출 시 값 전달 | 첫 번째 요소의 주소를 전달 |
호출 시 참조 전달 | C에서는 항상 참조로 전달 |
2D 배열 전달 | 함수 매개변수에서 차원을 지정 |
문자열 전달 | 문자열을 조작하거나 비교 |
계속 코딩하고, 계속 배우며, 가장 중요한 것은 즐겁게 하세요! ??
Credits: Image by storyset