null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
매개변수와 반환값
#c
#c-lang
#beginner
#functions
#params-return
@devpc
|
2026-03-29 05:33:44
|
GET /api/v1/nodes/34?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
0
Calls
# 매개변수와 반환값 ## 매개변수 (Parameters) 함수가 **외부로부터 데이터를 받는 방법**입니다. ```c // 매개변수 // ↓ ↓ int add(int a, int b) { return a + b; } // 인수(argument) // ↓ ↓ add(3, 5); // a=3, b=5로 전달됨 ``` - **매개변수(parameter)**: 함수 정의에서 받는 변수 (`a`, `b`) - **인수(argument)**: 함수 호출 시 전달하는 실제 값 (`3`, `5`) --- ## 값 전달 (Call by Value) C언어는 기본적으로 **값의 복사본**을 전달합니다. 함수 내부에서 매개변수를 바꿔도 **원래 변수는 변경되지 않습니다.** ```c #include <stdio.h> void change(int x) { x = 999; // 복사본만 변경됨 printf("함수 내부: %d\n", x); // 999 } int main() { int a = 10; change(a); printf("main에서: %d\n", a); // 10 (변경되지 않음) return 0; } ``` ``` 함수 내부: 999 main에서: 10 ``` --- ## 반환값 (Return Value) 함수가 **계산 결과를 호출자에게 돌려주는** 방법입니다. ```c double celsius_to_fahrenheit(double c) { return c * 9.0 / 5.0 + 32; } int main() { double temp = celsius_to_fahrenheit(100.0); printf("100°C = %.1f°F\n", temp); // 212.0°F return 0; } ``` --- ## 다양한 반환 타입 ```c int get_count() { return 42; } double get_pi() { return 3.14159; } char get_grade() { return 'A'; } void print_msg() { printf("hi\n"); } // 반환값 없음 ``` --- ## 조기 반환 (Early Return) 조건에 따라 함수를 일찍 종료할 수 있습니다. ```c int divide(int a, int b) { if (b == 0) { printf("오류: 0으로 나눌 수 없습니다.\n"); return -1; // 조기 반환 } return a / b; } int main() { printf("%d\n", divide(10, 2)); // 5 printf("%d\n", divide(10, 0)); // 오류 메시지 + -1 return 0; } ``` --- ## void 함수와 return `void` 함수에서도 `return`으로 조기 종료할 수 있습니다 (값 없이). ```c void print_positive(int n) { if (n <= 0) return; // 양수가 아니면 즉시 종료 printf("양수: %d\n", n); } ``` --- ## 여러 값 처리 패턴 C는 직접 여러 값을 반환할 수 없습니다. 우회 방법들: ### 방법 1: 포인터로 여러 값 수정 ```c void minmax(int a, int b, int *min, int *max) { *min = (a < b) ? a : b; *max = (a > b) ? a : b; } int main() { int lo, hi; minmax(7, 3, &lo, &hi); printf("최솟값: %d, 최댓값: %d\n", lo, hi); // 3, 7 return 0; } ``` ### 방법 2: 구조체 반환 (나중에 배울 내용) --- ## 예제: 온도 변환기 ```c #include <stdio.h> double to_fahrenheit(double c) { return c * 9.0 / 5.0 + 32; } double to_celsius(double f) { return (f - 32) * 5.0 / 9.0; } double to_kelvin(double c) { return c + 273.15; } void print_conversions(double celsius) { printf("섭씨 : %.2f°C\n", celsius); printf("화씨 : %.2f°F\n", to_fahrenheit(celsius)); printf("켈빈 : %.2fK\n", to_kelvin(celsius)); } int main() { double temp; printf("섭씨 온도 입력: "); scanf("%lf", &temp); print_conversions(temp); return 0; } ``` ---
// COMMENTS
ON THIS PAGE