C言語

【C言語】第5章第3回:引数と戻り値の基本

引数と戻り値を正しく理解することで、関数を効果的に活用できます。この章では、引数と戻り値の仕組みを基礎から丁寧に解説します。

1. 引数の基本

1.1 引数とは何か?

引数は、関数に渡されるデータのことです。関数は引数を使って、外部からデータを受け取り処理を行います。

例:2つの整数を足し算する関数

#include <stdio.h>

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

int main() {
    int result = add(10, 20); // 関数呼び出し時に引数を渡す
    printf("Sum: %d\n", result);
    return 0;
}

// 関数の定義
int add(int a, int b) {
    return a + b; // 引数を加算して返す
}

ステップバイステップ解説:

  1. int add(int a, int b);: 関数のプロトタイプを宣言します。
  2. int result = add(10, 20);: 呼び出し時に引数1020を渡します。
  3. return a + b;: 渡された値を加算し、結果を返します。

ポイント:

  • 引数はカンマで区切って指定します。
  • 渡された値は、関数内で変数として扱われます。

2. 戻り値の基本

2.1 戻り値とは何か?

戻り値は、関数が処理結果として呼び出し元に返す値のことです。戻り値の型は、関数の定義で指定します。

例:整数の平方を計算する関数

#include <stdio.h>

// 関数の宣言
int square(int num);

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

// 関数の定義
int square(int num) {
    return num * num; // 平方を計算して返す
}

ステップバイステップ解説:

  1. int square(int num);: 関数のプロトタイプを宣言します。
  2. int result = square(5);: 引数5を渡して関数を呼び出します。
  3. return num * num;: 平方値を計算して返します。

ポイント:

  • 戻り値の型を正しく指定することで、エラーを防ぎます。
  • voidを使用すると、値を返さない関数を作成できます。

3. 引数と戻り値の応用

3.1 ポインタを使った参照渡し

ポインタを使用すると、関数内で引数を直接変更できます。

例:2つの整数を交換する関数

#include <stdio.h>

// 関数の宣言
void swap(int *x, int *y);

int main() {
    int a = 5, b = 10;
    printf("Before swap: a = %d, b = %d\n", a, b);
    swap(&a, &b); // ポインタを渡す
    printf("After swap: a = %d, b = %d\n", a, b);
    return 0;
}

// 関数の定義
void swap(int *x, int *y) {
    int temp = *x; // xが指す値を保存
    *x = *y;       // yが指す値をxに代入
    *y = temp;     // 保存した値をyに代入
}

ステップバイステップ解説:

  1. void swap(int *x, int *y);: ポインタを引数として受け取る関数を宣言します。
  2. swap(&a, &b);: 変数abのアドレスを渡します。
  3. *x*y: ポインタを使って実際の値を操作します。

4. 練習問題

以下の課題に挑戦して、引数と戻り値の基本を深く理解しましょう。

  1. 2つの浮動小数点数を引数として受け取り、その平均を計算して返す関数を作成してください。
  2. 文字列を引数として受け取り、その文字数を返す関数を作成してください。
  3. ポインタを使って、配列内の最大値を返す関数を作成してください。

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

問1の解答

#include <stdio.h>

// 平均を計算する関数
float calculateAverage(float a, float b) {
    return (a + b) / 2.0;
}

int main() {
    float num1 = 5.5, num2 = 10.5;
    float avg = calculateAverage(num1, num2);
    printf("Average: %.2f\n", avg);
    return 0;
}

この関数は、渡された2つの浮動小数点数の平均を計算して返します。

6. まとめ

引数と戻り値を適切に利用することで、関数の効率と再利用性を向上させることができます。次回は、より高度な関数の活用方法を学びます。