C言語

【C言語】第5章第1回:関数とは何か?基礎から学ぶ

関数はC言語プログラムの基本的な構成要素であり、コードを効率的に管理するための重要な技術です。この章では、関数の基本を基礎から詳しく学びます。

1. 関数の基本概念

1.1 関数とは何か?

関数は、一連の処理を1つの名前でまとめたもので、以下の特徴を持ちます:

  • 再利用可能なコードを作成できる。
  • プログラムの読みやすさと保守性を向上させる。
  • 複雑なタスクを分割して処理できる。

関数の基本的な構造:

return_type function_name(parameter_list) {
    // 関数の処理内容
    return value;
}

ここで:

  • return_type: 関数が返す値の型。
  • function_name: 関数の名前。
  • parameter_list: 関数に渡す引数のリスト(空の場合もある)。

1.2 関数の基本例

例:2つの整数を足す関数

#include <stdio.h>

// 関数の宣言
int add(int a, int b);

int main() {
    int result = add(5, 3); // 関数の呼び出し
    printf("Result: %d\n", result);
    return 0;
}

// 関数の定義
int add(int a, int b) {
    return a + b; // 結果を返す
}

コードの解説:

  • int add(int a, int b): 2つの整数を受け取り、その合計を返す関数。
  • int result = add(5, 3);: 関数を呼び出して結果をresultに格納。
  • return a + b;: 合計を呼び出し元に返す。

2. 関数の種類

2.1 戻り値のない関数(void関数)

関数が値を返さない場合、戻り値の型としてvoidを使用します。

例:メッセージを表示する関数

#include <stdio.h>

void printMessage() {
    printf("Hello, World!\n");
}

int main() {
    printMessage(); // 関数の呼び出し
    return 0;
}

2.2 引数のない関数

関数が引数を取らない場合、voidを引数リストに指定します。

例:現在の時刻を表示する関数(擬似コード)

#include <stdio.h>

void displayTime() {
    // 実際の実装はシステム依存
    printf("Current Time: 12:00\n");
}

int main() {
    displayTime(); // 関数の呼び出し
    return 0;
}

3. 関数の引数と戻り値

3.1 値渡し(Pass by Value)

引数として渡されるデータが関数内でコピーされ、関数内での変更が呼び出し元に影響しません。

例:値渡しの例

#include <stdio.h>

void modifyValue(int x) {
    x = 10; // ローカル変数の変更
}

int main() {
    int a = 5;
    modifyValue(a);
    printf("a: %d\n", a); // 元の値は変更されない
    return 0;
}

3.2 ポインタを使った参照渡し(Pass by Reference)

ポインタを使用することで、関数内での変更が呼び出し元に影響します。

例:参照渡しの例

#include <stdio.h>

void modifyValue(int *x) {
    *x = 10; // ポインタを使って元の変数を変更
}

int main() {
    int a = 5;
    modifyValue(&a);
    printf("a: %d\n", a); // 値が変更される
    return 0;
}

4. 練習問題

以下の課題に挑戦して、関数の基本を実践的に学びましょう。

  1. 2つの整数を掛け算する関数を作成し、その結果を表示してください。
  2. 文字列を引数として取り、その長さを返す関数を作成してください。
  3. ポインタを使って、2つの整数を交換する関数を作成してください。

5. 練習問題の解答と解説

問1の解答

#include <stdio.h>

int multiply(int a, int b) {
    return a * b;
}

int main() {
    int result = multiply(4, 5);
    printf("Result: %d\n", result);
    return 0;
}

この関数は2つの整数を掛け算し、その結果を返します。

6. まとめ

関数を理解することで、コードを効率的に再利用できるようになります。次の章では、さらに高度な関数の使用方法を学びます。