1. ν¨μ ν¬μΈν°λ 무μμΈκ°
ν¨μ ν¬μΈν°λ Cμ C++μμ μ¬μ©λλ μ€μν κ°λ μ€ νλμ λλ€. ν¨μ ν¬μΈν°λ λ§ κ·Έλλ‘ ν¨μλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°μ λλ€. λ€λ₯Έ λ³μμ λ§μ°¬κ°μ§λ‘ ν¨μ ν¬μΈν°λ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό κ°μ§ λ³μλ‘μ μ μΈλ©λλ€. κ·Έλ¬λ μΌλ° λ³μκ° κ°μ κ°μ§λ€λ©΄, ν¨μ ν¬μΈν°λ ν¨μμ μ£Όμλ₯Ό κ°μ§λλ€.
ν¨μ ν¬μΈν°λ λ€λ₯Έ ν¨μλ₯Ό νΈμΆν μλ μκ³ , ν¨μλ₯Ό λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬ν μλ μμ΅λλ€. μ΄λ ν¨μλ₯Ό λμ μΌλ‘ νΈμΆνκ³ λ€μν μ€ν κ²½λ‘λ₯Ό λ§λ€ μ μκ² ν΄μ€λλ€.
Cμ ν¨μ ν¬μΈν°λ λ€μκ³Ό κ°μ ννλ‘ μμ±λ©λλ€:
λ°ν_νμ
(*ν¬μΈν°_μ΄λ¦)(맀κ°_λ³μ_νμ
)
μ¬κΈ°μ ν¬μΈν°_μ΄λ¦
μ ν¨μ ν¬μΈν°μ μ΄λ¦, λ°ν_νμ
μ ν΄λΉ ν¨μμ λ°ν νμ
, 맀κ°_λ³μ_νμ
μ ν΄λΉ ν¨μμ λ§€κ° λ³μ νμ
μ μλ―Έν©λλ€.
ν¨μ ν¬μΈν°λ₯Ό μ¬μ©νλ©΄ λ°νμ μμ μ΄λ€ ν¨μκ° μ€νλ κ²μΈμ§ λμ μΌλ‘ κ²°μ ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λ€νμ±κ³Ό μ μ°μ±μ μ 곡ν μ μμ΅λλ€. μ΄λ¬ν νΉμ§μ μ½λ°± ν¨μ λ° ν¨μ ν¬μΈν° λ°°μ΄κ³Ό κ°μ κ³ κΈ νλ‘κ·Έλλ° κΈ°λ²μ μ μ©νκ² νμ©λ©λλ€.
2. ν¨μ ν¬μΈν°μ μ μΈκ³Ό μ΄κΈ°ν
ν¨μ ν¬μΈν°λ₯Ό μ μΈνκ³ μ΄κΈ°ννλ λ°©λ²μ λ€λ₯Έ λ³μλ₯Ό μ μΈνκ³ μ΄κΈ°ννλ λ°©λ²κ³Ό μ μ¬ν©λλ€. λ€λ§ ν¨μ ν¬μΈν°μ νμ μ ν΄λΉ ν¨μμ μκ·Έλμ²μ μΌμΉν΄μΌ ν©λλ€.
ν¨μ ν¬μΈν°λ₯Ό μ μΈνκΈ° μν΄μλ λ¨Όμ λ°ν νμ
κ³Ό λ§€κ° λ³μ νμ
μ μ§μ ν΄μΌ ν©λλ€. κ·Έλ¦¬κ³ μ μΈν ν¨μ ν¬μΈν°μ μ΄λ¦μ μ νκ³ ν¬μΈν° μ°μ°μ *
μ μ¬μ©νμ¬ ν¬μΈν°μμ λνλ
λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
int (*add)(int, int);
μμ μμ λ "add"λΌλ μ΄λ¦μ κ°μ§λ λ°ν νμ
μ΄ int
μ΄κ³ λ§€κ° λ³μ νμ
μ΄ int
μΈ ν¨μ ν¬μΈν°λ₯Ό μ μΈνλ κ²μ
λλ€.
ν¨μ ν¬μΈν°λ₯Ό μ΄κΈ°ννλ €λ©΄ ν΄λΉ ν¨μμ μ£Όμλ₯Ό μ¬μ©ν΄μΌ ν©λλ€. ν¨μ μ΄λ¦μ ν¨μκ° λ©λͺ¨λ¦¬μ λ‘λλ μ£Όμμ΄λ―λ‘, μ΄λ¦μ μ¬μ©νμ¬ ν΄λΉ ν¨μμ μ£Όμλ₯Ό κ°μ Έμ¬ μ μμ΅λλ€. λ€μκ³Ό κ°μ ννλ‘ ν¨μ ν¬μΈν°λ₯Ό μ΄κΈ°νν μ μμ΅λλ€:
add = &func_name;
μμ μμ μμλ "func_name"μ΄λΌλ ν¨μμ μ£Όμλ₯Ό "add" ν¨μ ν¬μΈν°μ ν λΉν©λλ€. ν¬μΈν° μ°μ°μ &
λ ν΄λΉ λ³μμ μ£Όμλ₯Ό κ°μ Έμ€λ μν μ ν©λλ€.
λλ κ°λ¨νκ² λ€μκ³Ό κ°μ΄ μ΄κΈ°νν μλ μμ΅λλ€:
add = func_name;
μμ μμ λ ν΄λΉ ν¨μμ μ΄λ¦μ ν¨μ ν¬μΈν°μ λ°λ‘ ν λΉνλ κ²μΌλ‘, μ»΄νμΌλ¬κ° μλμΌλ‘ μ£Όμλ₯Ό κ°μ Έμ΅λλ€.
ν¨μ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ ν¨μλ₯Ό νΈμΆνλ €λ©΄ ν¨μ ν¬μΈν°λ₯Ό μμ°Έμ‘°νκ³ μΈμλ₯Ό μ λ¬ν΄μΌ ν©λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
int result = (*add)(2, 3);
μμ μμ λ "add" ν¨μ ν¬μΈν°λ₯Ό μμ°Έμ‘°νμ¬ ν΄λΉ ν¨μλ₯Ό νΈμΆνκ³ , μΈμλ‘ 2μ 3μ μ λ¬νμ¬ μ€νν ν κ²°κ³Όλ₯Ό "result" λ³μμ μ μ₯ν©λλ€.
ν¨μ ν¬μΈν°λ λ€λ₯Έ λ³μμ λ§μ°¬κ°μ§λ‘ λ€μν ν¨μλ€μ κ°λ¦¬ν¬ μ μμΌλ©°, λ°νμ λμ νΉμ ν¨μλ₯Ό λμ μΌλ‘ μ νν μ μλ μ μ°μ±μ μ 곡ν©λλ€.
3. ν¨μ ν¬μΈν°λ₯Ό νμ©ν μμ
ν¨μ ν¬μΈν°λ λ€νμ±κ³Ό μ μ°μ±μ μ 곡νλ κ°λ ₯ν λꡬμ λλ€. μ΄λ₯Ό ν΅ν΄ λ€λ₯Έ ν¨μλ€μ κ°λ¦¬ν€κ³ λμ μΌλ‘ νΈμΆνμ¬ νλ‘κ·Έλ¨μ μ€ν κ²½λ‘λ₯Ό κ²°μ ν μ μμ΅λλ€. μλ μμ λ ν¨μ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ μ°μ μ°μ°μ μννλ κ°λ¨ν κ³μ°κΈ°λ₯Ό ꡬννλ μμ μ λλ€.
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int divide(int a, int b) {
return a / b;
}
int main() {
int (*calculator)(int, int);
char operator;
int operand1, operand2;
printf("Enter an arithmetic operation (+, -, *, /): ");
scanf("%c", &operator);
printf("Enter two operands: ");
scanf("%d %d", &operand1, &operand2);
switch(operator) {
case '+':
calculator = add;
break;
case '-':
calculator = subtract;
break;
case '*':
calculator = multiply;
break;
case '/':
calculator = divide;
break;
default:
printf("Invalid operator\n");
return 1;
}
int result = (*calculator)(operand1, operand2);
printf("Result: %d\n", result);
return 0;
}
μμ μμ μμλ add
, subtract
, multiply
, divide
λΌλ 4κ°μ ν¨μλ₯Ό μ μνμμ΅λλ€. κ° ν¨μλ 2κ°μ μ μ λ§€κ° λ³μλ₯Ό λ°κ³ ν΄λΉ μ°μ°μ μνν κ²°κ³Όλ₯Ό λ°νν©λλ€.
main
ν¨μμμλ calculator
λΌλ ν¨μ ν¬μΈν°λ₯Ό μ μΈνκ³ μ΄κΈ°νν©λλ€. μ¬μ©μλ‘λΆν° μ°μ μ°μ°μμ λ κ°μ νΌμ°μ°μλ₯Ό μ
λ ₯λ°μ ν, switch
λ¬Έμ μ¬μ©νμ¬ ν΄λΉ μ°μ°μμ λ§λ μ°μ° ν¨μλ₯Ό calculator
μ ν λΉν©λλ€.
μ΄ν, calculator
ν¨μ ν¬μΈν°λ₯Ό μμ°Έμ‘°νμ¬ μ νλ μ°μ° ν¨μλ₯Ό νΈμΆνκ³ νΌμ°μ°μλ₯Ό μ λ¬νμ¬ κ²°κ³Όλ₯Ό κ³μ°ν©λλ€. λ§μ§λ§μΌλ‘ κ²°κ³Όλ₯Ό μΆλ ₯ν©λλ€.
μ΄ μμ μμλ ν¨μ ν¬μΈν°λ₯Ό μ¬μ©νμ¬ μ¬λ¬ κ°μ ν¨μλ₯Ό μ μ°νκ² μ ννκ³ νΈμΆν μ μλ λμ μΈ νλ‘κ·Έλ¨μ ꡬννμμ΅λλ€. μ΄λ¬ν μ νμ μ½λλ μ½λ°± ν¨μ, μ΄λ²€νΈ μ²λ¦¬κΈ° λ±μμ λ§μ΄ νμ©λ©λλ€.
4. ν¨μ ν¬μΈν° λ°°μ΄
ν¨μ ν¬μΈν° λ°°μ΄μ μ¬λ¬ κ°μ ν¨μ ν¬μΈν°λ₯Ό μ μ₯νλ λ°°μ΄μ λλ€. μ΄λ₯Ό μ¬μ©νλ©΄ μ¬λ¬ ν¨μ μ€μμ νμν ν¨μλ₯Ό μ ννκ³ νΈμΆν μ μμ΅λλ€. ν¨μ ν¬μΈν° λ°°μ΄μ λ€μκ³Ό κ°μ νμμΌλ‘ μ μΈλ©λλ€:
return_type (*array_name[size])(parameter_type);
μμ μμ μμλ return_type
μ λ°ν νμ
μ, array_name
μ λ°°μ΄μ μ΄λ¦μ, size
λ λ°°μ΄μ ν¬κΈ°λ₯Ό λνλ
λλ€. parameter_type
μ ν¨μμ λ§€κ° λ³μ νμ
μ λνλ΄κ³ , return_type
μ ν΄λΉ ν¨μμ λ°ν νμ
μ λνλ
λλ€.
ν¨μ ν¬μΈν° λ°°μ΄μ μ΄κΈ°ννλ λ°©λ²μ λ°°μ΄ μμμ ν΄λΉνλ ν¨μλ€μ μ£Όμλ₯Ό μ°¨λ‘λλ‘ ν λΉνλ κ²μ λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
int sum(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int (*calculator[3])(int, int) = {sum, subtract, multiply};
μμ μμ μμλ calculator
λΌλ ν¨μ ν¬μΈν° λ°°μ΄μ μ μΈνκ³ sum
, subtract
, multiply
ν¨μλ€μ μ£Όμλ₯Ό μ°¨λ‘λλ‘ ν λΉνμ¬ μ΄κΈ°νν©λλ€. λ°°μ΄μ ν¬κΈ°λ 3μ΄λ©°, κ° μμμ νμ
μ int (*)(int, int)
λ‘, λ°ν νμ
μ΄ int
μ΄κ³ λ§€κ° λ³μ νμ
μ΄ int
μΈ ν¨μ ν¬μΈν°λ₯Ό λνλ
λλ€.
ν¨μ ν¬μΈν° λ°°μ΄μ μ¬μ©νμ¬ ν¨μλ₯Ό νΈμΆνλ €λ©΄ ν΄λΉ ν¨μ ν¬μΈν°λ₯Ό μμ°Έμ‘°νκ³ μΈμλ₯Ό μ λ¬ν΄μΌ ν©λλ€. μλ₯Ό λ€λ©΄ λ€μκ³Ό κ°μ΅λλ€:
int result = (*calculator[0])(2, 3);
μμ μμ μμλ calculator
λ°°μ΄μ 첫 λ²μ§Έ μμμΈ sum
ν¨μ ν¬μΈν°λ₯Ό μμ°Έμ‘°νμ¬ ν΄λΉ ν¨μλ₯Ό νΈμΆνκ³ , μΈμλ‘ 2μ 3μ μ λ¬νμ¬ μ€νν ν κ²°κ³Όλ₯Ό result
λ³μμ μ μ₯ν©λλ€.
ν¨μ ν¬μΈν° λ°°μ΄μ ν¨μ ν¬μΈν°λ€μ μ μ°νκ² κ΄λ¦¬νκ³ λμ μΌλ‘ νΈμΆν μ μλ λ°©λ²μ μ 곡ν©λλ€. μ΄λ₯Ό ν΅ν΄ μ¬λ¬ κ°μ ν¨μλ₯Ό ν¨μ¨μ μΌλ‘ μ ννκ³ μ€νν μ μμ΅λλ€.
5. ν¨μ ν¬μΈν°μ μ½λ°± ν¨μ
ν¨μ ν¬μΈν°μ μ½λ°± ν¨μλ C νλ‘κ·Έλλ°μμ μμ£Ό μ¬μ©λλ κΈ°λ² μ€ νλμ λλ€. μ΄λ₯Ό ν΅ν΄ ν¨μμ λμμ λ€λ₯Έ ν¨μμκ² μ릴 μ μμΌλ©°, νλ‘κ·Έλ¨μ μ μ°μ±κ³Ό νμ₯μ±μ λμΌ μ μμ΅λλ€. ν¨μ ν¬μΈν°μ μ½λ°± ν¨μλ λ€μκ³Ό κ°μ΄ ν¨κ» μ¬μ©λ©λλ€.
ν¨μ ν¬μΈν°
ν¨μ ν¬μΈν°λ ν¨μμ μ£Όμλ₯Ό μ μ₯νλ λ³μμ λλ€. C μΈμ΄μμλ ν¨μλ₯Ό νΈμΆν λ ν΄λΉ ν¨μμ μ΄λ¦μ μ¬μ©νμ¬ νΈμΆνμ§λ§, ν¨μ ν¬μΈν°λ₯Ό μ¬μ©νλ©΄ ν¨μμ μ£Όμλ₯Ό λ³μλ‘ μ μ₯νκ³ νμν λμ ν΄λΉ ν¨μλ₯Ό κ°λ¦¬ν¬ μ μμ΅λλ€. λ€μμ ν¨μ ν¬μΈν°λ₯Ό μ μΈνλ λ°©λ²μ λλ€:
return_type (*function_ptr)(parameter_type);
μμ μμ μμ return_type
μ λ°ν νμ
μ, function_ptr
μ ν¨μ ν¬μΈν°μ μ΄λ¦μ, parameter_type
μ ν¨μμ λ§€κ° λ³μ νμ
μ λνλ
λλ€. ν¨μ ν¬μΈν°λ μ£Όλ‘ ν¨μλ₯Ό λ€λ₯Έ ν¨μμκ² μ λ¬νκΈ° μν΄ μ¬μ©λ©λλ€.
μ½λ°± ν¨μ
μ½λ°± ν¨μλ λ€λ₯Έ ν¨μμμ νΈμΆλλ ν¨μμ λλ€. μ½λ°± ν¨μλ ν¨μ ν¬μΈν°λ₯Ό ν΅ν΄ μ°Έμ‘°λλ©°, ν΄λΉ ν¨μμ λμμ νΈμΆνλ ν¨μμ μν΄ κ²°μ λ©λλ€. μ½λ°± ν¨μλ μ΄λ²€νΈ μ²λ¦¬, λΉλκΈ° μμ , μ λ ¬ κΈ°λ₯ λ± λ€μν μν©μμ μ μ©νκ² μ¬μ©λ©λλ€.
μ½λ°± ν¨μλ λ€μκ³Ό κ°μ νμμΌλ‘ μ μλ©λλ€:
return_type callback_function(parameter_type);
μ½λ°± ν¨μλ νΈμΆλλ ν¨μκ° νμν μμ μ ν¨μ ν¬μΈν°λ₯Ό ν΅ν΄ νΈμΆλ©λλ€. νΈμΆνλ ν¨μμμλ μΈμλ‘ μ½λ°± ν¨μμ ν¬μΈν°μ νμν λ°μ΄ν°λ₯Ό μ λ¬νμ¬ μ½λ°± ν¨μκ° μμ μ μνν μ μλλ‘ ν©λλ€.
ν¨μ ν¬μΈν°μ μ½λ°± ν¨μμ νμ©
μλ μμ λ μ½λ°± ν¨μλ₯Ό μ¬μ©νμ¬ μ μ λ°°μ΄μ μ λ ¬νλ μμ μ λλ€. μ΄ μμ μμλ μ½λ°± ν¨μλ₯Ό μ¬μ©νμ¬ μ λ ¬μ λ°©μμ μΈλΆμμ κ²°μ ν μ μλλ‘ νμμ΅λλ€.
#include <stdio.h>
void bubbleSort(int arr[], int size, int (*compare)(int, int)) {
for(int i = 0; i < size - 1; i++) {
for(int j = 0; j < size - i - 1; j++) {
if((*compare)(arr[j], arr[j+1])) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
int ascendingOrder(int a, int b) {
return a > b;
}
int descendingOrder(int a, int b) {
return a < b;
}
void printArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {5, 3, 1, 4, 2};
int size = sizeof(arr) / sizeof(arr[0]);
printf("Original array: ");
printArray(arr, size);
printf("Sorted in ascending order: ");
bubbleSort(arr, size, ascendingOrder);
printArray(arr, size);
printf("Sorted in descending order: ");
bubbleSort(arr, size, descendingOrder);
printArray(arr, size);
return 0;
}
μμ μμ μμ bubbleSort
ν¨μλ μ λ ¬μ μννλ ν¨μμ
λλ€. μ΄ ν¨μλ λ°°μ΄μ μμλ€μ λΉκ΅νλ λ° μ¬μ©λλ ν¨μ ν¬μΈν°λ₯Ό μΈμλ‘ λ°μ΅λλ€. μ΄ λλΆμ μ λ ¬μ λ°©μμ μΈλΆμμ μ€μ ν μ μκ² λ©λλ€.
ascendingOrder
μ descendingOrder
ν¨μλ λΉκ΅ ν¨μλ‘, μ λ ¬ λ°©μμ λ°λΌ λ κ°μ μ«μλ₯Ό λΉκ΅νλ κ²°κ³Όλ₯Ό λ°νν©λλ€. printArray
ν¨μλ λ°°μ΄μ μμλ€μ μΆλ ₯νλ helper ν¨μμ
λλ€.
main
ν¨μμμλ μ μ λ°°μ΄μ μμ±νκ³ , bubbleSort
ν¨μλ₯Ό νΈμΆνμ¬ λ°°μ΄μ μ λ ¬ν©λλ€. μ¬κΈ°μλ ascendingOrder
ν¨μμ descendingOrder
ν¨μλ₯Ό κ°κ° μ½λ°± ν¨μλ‘ μ¬μ©νμ¬ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μ μ λ ¬μ μνν©λλ€.
ν¨μ ν¬μΈν°μ μ½λ°± ν¨μλ₯Ό νμ©νλ©΄ νλ‘κ·Έλ¨μ μ μ°μ±μ ν₯μμν¬ μ μμ΅λλ€. μ½λ°± ν¨μλ₯Ό μ¬μ©νλ©΄ λ€μν λμμ κ²°μ νλ ν¨μλ₯Ό μμ±ν μ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ μ μ°νκ³ μ¬μ¬μ© κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
λκΈ