---
# System prepended metadata

title: 【4-1】副函式

---

# 【4-1】副函式

副函式就是你自己定義的一段功能。它有名字、可以接收資料（參數），也可以把結果回傳（`return`）。

輸入一個東西 → 進行一個操作 → 再輸出一個東西（也可以不輸出）

例如：飲料罐裝的填充機器，輸入一個瓶子，進行填裝飲料，再輸出一個裝滿飲料的瓶子。

## 基本語法

```cpp
資料型別 副函式名稱(參數列表) {
    // 要執行的程式碼
    return 回傳值; // 如果資料型別不是 void，就需要回傳值
}
```

要注意，回傳值必須和資料型別相同！

### Python對照

Python 是動態型別語言，不用事先宣告變數的資料型別，也不需要在函式定義時指定回傳型別，所以接下來的 Python 範例中，都不會特別寫資料型別，也不需要 `void`、`int`、`bool`，只需要用 `def` 就好了。
```python
def 副函式名稱(參數列表):
    # 要執行的程式碼
    return 回傳值  # 如果沒有回傳值可以省略 return 或寫 return None
```
## 資料型別

可以去複習 [【1-1】變數宣告](https://hackmd.io/@LAfWxjSxRASps-4O_bppsA/H1PxDlSVeg) ，只多了一個 `void`，意思是不需要回傳值。

## 副函式基本守則

1. 如果非全域變數，就必須要傳遞變數給副函式。（忘記的可以去複習 [【1-3】變數範圍](https://hackmd.io/@LAfWxjSxRASps-4O_bppsA/ryRUM4HEle)）

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 傳遞變數，位置一一對應，資料型態也要相同
// 整數 x 對應到整數 a ，整數 y 對應到整數 b
void add(int a, int b) {
    // 可以在這裡進行某些操作
}

int main() {
    int x = 5, y = 3;
    
    add(x, y); // 傳遞變數 x 和 y 到 add 函式
    return 0;
}
```

2. 傳遞陣列時，直接使用陣列的名字當指標就可以了。

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 一維整數陣列 nums 對應到 一維整數陣列 arr
// 可以不用給定大小
void sumArray(int arr[]) {
    // 可以在這裡進行某些操作
}

int main() {
    int nums[] = {1, 2, 3, 4, 5};
    
    sumArray(nums);  // 傳遞陣列到副函式
    return 0;
}
```

3. 如果是二維陣列，則必須將大小先訂好至少一個。

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 二維整數陣列 grid 對應二維整數陣列 arr
// 需先給定一個維度的大小
void sum2DArray(int arr[][3]) {
    // 可以在這裡進行某些操作
}

int main() {
    int grid[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};
    
    sum2DArray(grid);  // 傳遞二維陣列
    return 0;
}
```

4. 若是希望傳遞過去的東西不要被更改，可以加上 `const` 來保護變數。

```cpp=1
// 確保陣列操作時不會更改其內容
void Array(const int arr[]) {
    // 可以在這裡進行某些操作
}
```

### Python對照

Python 沒有 `const`，如果不想讓函式改變 list，通常會在函式內部複製一份或不要做修改。


## int

`int` 代表此副函式最後會回傳一個整數，常見的使用方法為「遞迴」，我們在下一個章節[【4-2】遞迴](https://hackmd.io/@LAfWxjSxRASps-4O_bppsA/Hy8oVcQrel) 會提到。

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 副函式：計算兩個數字的和，並返回結果
int sum(int a, int b) {
    return a + b;
}

int main() {
    int x, y;
    
    cin >> x >> y;
    
    // 調用 sum 函式，並將結果存儲在 result 中
    int result = sum(x, y);
    
    cout << "The sum of " << x << " and " << y << " is " << result << endl;
    
    return 0;
}
```

### Python 對照

```python
def sum(a, b):
    return a + b

x = int(input())
y = int(input())

result = sum(x, y)

print(f"The sum of {x} and {y} is {result}")
```

## void

`void` 代表「無」，即該函式不返回任何資料或結果。通常用於僅執行某些操作（如打印訊息、修改參數等）而不需要返回結果的函式。特別注意，如果需要終止 `void` 類型的副函式的話，仍然可以使用 `return` ，只不過不需要加入回傳值（就寫一個 `return` 就好了）。

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 副函式：檢查數字是否為正數，若是則打印，否則提前退出
void printPositiveNumber(int num) {
    if (num <= 0) {
        cout << "The number is not positive. Exiting function." << endl;
        return;  // 提前結束函式執行
    }
    cout << "The number is positive: " << num << endl;
}

int main() {
    int num;

    cin >> num;

    // 呼叫函式處理數字
    printPositiveNumber(num);

    return 0;
}
```

### Python 對照

```python
def print_positive_number(num):
    if num <= 0:
        print("The number is not positive. Exiting function.")
        return
    print(f"The number is positive: {num}")

num = int(input())

print_positive_number(num)
```

## bool

`bool` 會回傳 `true` 或者 `false`，通常用於判斷此操作是否合法，例如迷宮的邊界條件。

```cpp=1
#include <bits/stdc++.h>

using namespace std;

// 副函式：檢查一個數字是否是 2 的倍數
bool isMultipleOfTwo(int n) {
    return n % 2 == 0;
    
    /* 可以看成下方這樣子
    if(n % 2 == 0){
        return true;
    }
    else{
        return false;
    }*/
}

int main() {
    int num;
    
    cin >> num;
    
    // 調用 isMultipleOfTwo 函式，檢查 num 是否是 2 的倍數
    if (isMultipleOfTwo(num)) {
        cout << num << " is a multiple of 2." << endl;
    } else {
        cout << num << " is not a multiple of 2." << endl;
    }
    
    return 0;
}
```

### Python 對照

```python
def is_multiple_of_two(n):
    return n % 2 == 0

num = int(input())

if is_multiple_of_two(num):
    print(f"{num} is a multiple of 2.")
else:
    print(f"{num} is not a multiple of 2.")
```

比較常用的就是這三個資料型別，其它的依據題目需求自行運用即可，這邊不多做介紹。

---

聯絡方式：[codecodefunny@gmail.com](mailto:codecodefunny@gmail.com)
最後編修時間：2025/07/10 子柚筆

