#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; // 引数を加算して返す
}
ステップバイステップ解説:
int add(int a, int b);: 関数のプロトタイプを宣言します。
int result = add(10, 20);: 呼び出し時に引数10と20を渡します。
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; // 平方を計算して返す
}
ステップバイステップ解説:
int square(int num);: 関数のプロトタイプを宣言します。
int result = square(5);: 引数5を渡して関数を呼び出します。
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に代入
}
ステップバイステップ解説:
void swap(int *x, int *y);: ポインタを引数として受け取る関数を宣言します。
swap(&a, &b);: 変数aとbのアドレスを渡します。
*xと*y: ポインタを使って実際の値を操作します。
4. 練習問題
以下の課題に挑戦して、引数と戻り値の基本を深く理解しましょう。
2つの浮動小数点数を引数として受け取り、その平均を計算して返す関数を作成してください。
文字列を引数として受け取り、その文字数を返す関数を作成してください。
ポインタを使って、配列内の最大値を返す関数を作成してください。
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;
}