🖥️

【C言語超入門】 第16回 関数

2024/12/25に公開

https://youtu.be/EONlt8BsHi4

四国めたん
\textcolor{pink}{四国めたん: }教師役ですわ

ずんだもん
\textcolor{lime}{ずんだもん: }生徒役なのだ

\footnotesize \textcolor{pink}{四国めたん:} 皆さん、こんにちは。四国めたんです

\footnotesize \textcolor{lime}{ずんだもん:} ずんだもんなのだ。こんにちはなのだ

\footnotesize \textcolor{pink}{四国めたん:} 今回もC言語のお勉強をしていきましょう

\footnotesize \textcolor{lime}{ずんだもん:} レッツゴーなのだ

\footnotesize \textcolor{pink}{四国めたん:} 前回、前々回ではメイン関数のプログラムが少し長くなってきましたわね

\footnotesize \textcolor{lime}{ずんだもん:} 1つの画面に収まりきらなくなって、見づらくなってきたのだ

\footnotesize \textcolor{pink}{四国めたん:} ですので、今回はプログラムを分割して記述するために、関数の作成についてお話ししますわ

\footnotesize \textcolor{lime}{ずんだもん:} おねがいなのだ

関数って自分で作れるんです

\footnotesize \textcolor{pink}{四国めたん:} これまでは関数といえば 標準Cライブラリ に含まれる標準の関数でしたわ

\footnotesize \textcolor{lime}{ずんだもん:} printf()getchar()とかなのだ

\footnotesize \textcolor{pink}{四国めたん:} これらは先輩プログラマーが、最適化したプログラムとして作成し、まとめてくれたものですわ

\footnotesize \textcolor{lime}{ずんだもん:} ありがたいのだ

\footnotesize \textcolor{pink}{四国めたん:} たいへん多くの関数が用意されていて、一般的に欲しい機能はひと通り揃っていますわね

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} とはいえ、全ての機能を完全にカバーできるわけではありませんわ

\footnotesize \textcolor{lime}{ずんだもん:} つまり、カバーされていない機能は、別途、用意する必要があるということか

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{lime}{ずんだもん:} どうすれば良いのだ?

\footnotesize \textcolor{pink}{四国めたん:} 標準Cライブラリ でカバーされていない機能は、他のライブラリとして提供されている場合が多いですわ

\footnotesize \textcolor{lime}{ずんだもん:} C言語は、だてに半世紀以上の歴史を誇ってはいないのだ!

\footnotesize \textcolor{pink}{四国めたん:} ネットワークを扱うライブラリやデータベースを扱うライブラリ、GUIのライブラリなど、数多くの例がありますわ

\footnotesize \textcolor{pink}{四国めたん:} とはいえ、提供されていない場合には自作する必要がありますわね

\footnotesize \textcolor{lime}{ずんだもん:} え~、関数は自分で作れるのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、関数は自分で作れますわ

\footnotesize \textcolor{pink}{四国めたん:} というか、今までも関数を作っていますわね

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、void main() {}ですわ

\footnotesize \textcolor{pink}{四国めたん:} じつはメイン関数も、その名の通り、関数なのですわ

\footnotesize \textcolor{lime}{ずんだもん:} ビックリなのだ

\footnotesize \textcolor{pink}{四国めたん:} ただ、プログラム実行時に、最初に自動的に呼ばれる等、他の関数とは少々異なる特別な関数ですわね

関数はメリットがいっぱいです

\footnotesize \textcolor{lime}{ずんだもん:} でも、わざわざ関数を使うメリットはあるのか?

\footnotesize \textcolor{pink}{四国めたん:} もちろん、ありますわ

\footnotesize \textcolor{lime}{ずんだもん:} どのようなメリットがあるのだ?

\footnotesize \textcolor{pink}{四国めたん:} 大きく2つほどありますわね

\footnotesize \textcolor{pink}{四国めたん:} 1つめは、関数を再利用することによる省力化ですわ

\footnotesize \textcolor{lime}{ずんだもん:} 関数を使うことで省力化できるのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、特定の処理を関数とすることで、同じ処理を関数呼び出しだけで済ますことができますわ

\footnotesize \textcolor{lime}{ずんだもん:} 具体的なイメージがわかないのだ

\footnotesize \textcolor{pink}{四国めたん:} 例えばprintfは普通に処理を記述すると1000行以上の処理になりますわね

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} それをprintfの呼び出しだけで済ませられるのは凄いメリットだと思いませんか?

\footnotesize \textcolor{lime}{ずんだもん:} たしかにすごいのだ

\footnotesize \textcolor{pink}{四国めたん:} 2つめのメリットは、関数で処理を分割することで、見やすくなることですわ

\footnotesize \textcolor{lime}{ずんだもん:} 見やすくなるのがメリットなのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、プログラムは見やすい程、バグが減り、メンテナンスが容易になりますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{lime}{ずんだもん:} 具体的にはどんな感じなのだ?

\footnotesize \textcolor{pink}{四国めたん:} 例えば、今までのプログラムの例は、せいぜい数十行程度の大きさでしたわ

\footnotesize \textcolor{lime}{ずんだもん:} たしかに…

\footnotesize \textcolor{pink}{四国めたん:} でも一般に提供されているプログラムは、数千行は当たり前で、数万行、数十万行のコードも珍しくありませんわ

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} そのコードをメイン関数にのみ記述した場合、何を何処に書いたか判らなくなってしまいますわね

\footnotesize \textcolor{lime}{ずんだもん:} 想像できるのだ

\footnotesize \textcolor{pink}{四国めたん:} ですので、コードを数十行、多くても数百行程度に分割して関数にすることで、メンテナンスし易くするのですわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{pink}{四国めたん:} 特に関数を機能別にまとめることができれば、関数名から処理の内容を推測できるようになりますわ

\footnotesize \textcolor{lime}{ずんだもん:} 関数名が適切なら、メンテナンスが、より容易になるのだ

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

関数の形式についてのお話しです

\footnotesize \textcolor{pink}{四国めたん:} では関数を記述するための形式について考えますわ

\footnotesize \textcolor{lime}{ずんだもん:} どのような形なのだ?

\footnotesize \textcolor{pink}{四国めたん:} 一般的な形式は、このようになりますわ

戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型 引数2の名前, ...) {
  処理;
  return 戻り値;
}

\footnotesize \textcolor{lime}{ずんだもん:} なんか複雑なのだ

\footnotesize \textcolor{pink}{四国めたん:} 少しずつ解説して行きますわね

まずは戻り値の型です

\footnotesize \textcolor{pink}{四国めたん:} まずは関数の 戻り値の型 を指定しますわ

\footnotesize \textcolor{lime}{ずんだもん:} 関数と云うだけあって、値が返るのは理解できるのだ

\footnotesize \textcolor{pink}{四国めたん:} はい、その返る値の型を関数の最初に記述しますわ

\footnotesize \textcolor{lime}{ずんだもん:} でも、戻り値が必要ない関数も存在するのだ

\footnotesize \textcolor{pink}{四国めたん:} その場合には 戻り値の型 としてvoidを指定しますわ

\footnotesize \textcolor{lime}{ずんだもん:} void

\footnotesize \textcolor{pink}{四国めたん:} はい、メイン関数void main() {}のようにvoidを指定した場合には「戻り値がない」ことを表しますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

関数名には小文字を使いましょう

\footnotesize \textcolor{pink}{四国めたん:} 次は 関数名 ですわね

\footnotesize \textcolor{lime}{ずんだもん:} 関数名 は、どのような名前を使うことができるのだ?

\footnotesize \textcolor{pink}{四国めたん:} 関数名 については 変数名 と同じ規則が適用されますわ

\footnotesize \textcolor{lime}{ずんだもん:} つまり、使用できるのは英数字とアンダースコアのみということか?

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{pink}{四国めたん:} また最初の文字には数字以外を用いますわね

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{lime}{ずんだもん:} ところで 関数名 に大文字を使用することはできるのか?

\footnotesize \textcolor{pink}{四国めたん:} 関数名に大文字を使用しても問題ありませんわね

\footnotesize \textcolor{pink}{四国めたん:} でも、C言語では慣習として小文字のみを使用しますわ

\footnotesize \textcolor{lime}{ずんだもん:} 慣習なら従っておくのだ

\footnotesize \textcolor{pink}{四国めたん:} そして、 関数名 には、できるだけ判り易い名前を付けましょうね

\footnotesize \textcolor{lime}{ずんだもん:} わかりやすい名前?

\footnotesize \textcolor{pink}{四国めたん:} はい、何をする関数なのかが、ひと目で判るような名前がいいですわね

\footnotesize \textcolor{lime}{ずんだもん:} りょうかいなのだ

引数は幾つでも指定できるのです

\footnotesize \textcolor{pink}{四国めたん:} 次に 関数名 に続く括弧内に 引数 を列挙しますわ

\footnotesize \textcolor{lime}{ずんだもん:} 引数 とは、どのようなものなのだ?

\footnotesize \textcolor{pink}{四国めたん:} 数学の関数y = f(x)の変数"x"に相当するものと考えて下さいね

\footnotesize \textcolor{lime}{ずんだもん:} わかったのだ

\footnotesize \textcolor{lime}{ずんだもん:} ちなみに 引数 は幾つ指定してもいいのか?

\footnotesize \textcolor{pink}{四国めたん:} 基本的には 引数 は幾つでも指定できますわ

\footnotesize \textcolor{lime}{ずんだもん:} ところで 引数引数の型引数の名前 に分かれているようだけど…

\footnotesize \textcolor{pink}{四国めたん:} はい、 引数 を指定する場合は、セットできる値の型と、 引数名 を指定する必要がありますわ

\footnotesize \textcolor{lime}{ずんだもん:} なんか、変数の宣言に似ているような気がするのだ

\footnotesize \textcolor{pink}{四国めたん:} いい所に気が付きましたわね

\footnotesize \textcolor{pink}{四国めたん:} 実際 引数 は、関数内では変数のような扱いとなりますわ

\footnotesize \textcolor{lime}{ずんだもん:} ということは、 引数名変数名 と同じ規則が適用されるのか?

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{lime}{ずんだもん:} つまり、使用できるのは英数字とアンダースコアのみで、最初の文字には数字以外を用いるのか

\footnotesize \textcolor{pink}{四国めたん:} よくできましたわ

戻り値はreturnで

\footnotesize \textcolor{pink}{四国めたん:} 次は 処理 を飛ばして 戻り値 についてお話ししますわ

\footnotesize \textcolor{lime}{ずんだもん:} え~、飛ばすのか⁉

\footnotesize \textcolor{pink}{四国めたん:} まぁ、 処理 は波括弧"{}"内に記述する以外、お話しすることがありませんから…

\footnotesize \textcolor{lime}{ずんだもん:} う~ん…

\footnotesize \textcolor{pink}{四国めたん:} 気を取り直して…、 戻り値returnキーワードの後に指定しますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{pink}{四国めたん:} なお 戻り値 の型については、関数の最初に記述している 戻り値の型 に合わせる必要がありますわ

\footnotesize \textcolor{lime}{ずんだもん:} 戻り値の型voidの場合にはどうするのだ?

\footnotesize \textcolor{pink}{四国めたん:} returnのみで 戻り値 を指定する必要がありませんわ

\footnotesize \textcolor{pink}{四国めたん:} また、return自体を省略してもかまいませんわね

\footnotesize \textcolor{lime}{ずんだもん:} そういえば、今までのメイン関数もreturnを使っていなかったのだ

\footnotesize \textcolor{lime}{ずんだもん:} ところでreturnは処理の最後に書かないといけないのか?

\footnotesize \textcolor{pink}{四国めたん:} いいえ、処理の最後以外にreturnを書くことはできますわ

\footnotesize \textcolor{pink}{四国めたん:} ただ、その場合にはreturn以降の行の処理が飛ばされますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{lime}{ずんだもん:} returnを処理の最後以外に書けるということは、returnを複数、書くこともできるのか…

\footnotesize \textcolor{pink}{四国めたん:} 鋭いですわね

\footnotesize \textcolor{pink}{四国めたん:} ただreturnの数が多すぎると、プログラムが読みにくくなるので注意が必要ですわ

\footnotesize \textcolor{lime}{ずんだもん:} できるだけreturnは少なくするのだ

関数の実例を見てみましょう

\footnotesize \textcolor{pink}{四国めたん:} とりあえず実際の関数を作成して使ってみましょう

\footnotesize \textcolor{lime}{ずんだもん:} おねがいするのだ

\footnotesize \textcolor{pink}{四国めたん:} 整数の足し算を関数として分離したプログラムですわ

#include <stdio.h>

int add(int a, int b) {
  int c = a + b;
  return c;
}

void main() {
  int x = 1;
  int y = 2;
  int z = add(x, y);
  printf("xとyの和は%dです\n", z);
}

足し算の関数

\footnotesize \textcolor{lime}{ずんだもん:} プログラムの説明をおねがいなのだ

\footnotesize \textcolor{pink}{四国めたん:} わかりましたわ

\footnotesize \textcolor{pink}{四国めたん:} まず、関数addint型 の値を返す関数ですわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{pink}{四国めたん:} そして、引数は int型 の"a"と int型 の"b"を取りますわ

\footnotesize \textcolor{lime}{ずんだもん:} 今回の関数の引数は2つなのだ

\footnotesize \textcolor{pink}{四国めたん:} 関数の処理内容はいたって簡単ですわ

\footnotesize \textcolor{lime}{ずんだもん:} え~と…、引数の"a"と"b"を足した値で int型 の変数"c"を初期化しているのだ

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{lime}{ずんだもん:} そして、変数"c"の値をreturnで返しているのだ

\footnotesize \textcolor{pink}{四国めたん:} よくできましたわ

\footnotesize \textcolor{pink}{四国めたん:} そして関数の呼び出しはメイン関数内で行われていますわ

\footnotesize \textcolor{lime}{ずんだもん:} int z = add(x, y);の部分か?

\footnotesize \textcolor{pink}{四国めたん:} はい、 int型 の変数"x"と"y"を引数にセットして、戻り値で int型 の変数"z"を初期化していますわ

\footnotesize \textcolor{lime}{ずんだもん:} りょうかいなのだ

\footnotesize \textcolor{lime}{ずんだもん:} ところで引数の指定で、順番は関係ないのか?

\footnotesize \textcolor{pink}{四国めたん:} いいえ、引数の順番は重要ですわ

\footnotesize \textcolor{pink}{四国めたん:} 今回、関数の定義では、引数"a"と"b"が"a"→"b"の順番で指定されていますわね

\footnotesize \textcolor{lime}{ずんだもん:} そのとおりなのだ

\footnotesize \textcolor{pink}{四国めたん:} ですので、呼び出す側では、引数にセットした"x"と"y"は、順番通りに"x"が"a"に、"y"が"b"に渡されますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほど、引数の順番は大事なのだ

関数を定義する場所は大事ですよ

\footnotesize \textcolor{pink}{四国めたん:} 関数を定義する場合には順番が大切ですわ

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、関数は使用する前に定義または宣言されている必要がありますわ

\footnotesize \textcolor{pink}{四国めたん:} ですので、サンプルコードではメイン関数の中で使う前にadd関数を定義していますわ

\footnotesize \textcolor{lime}{ずんだもん:} なるほどなのだ

\footnotesize \textcolor{pink}{四国めたん:} 試しにadd関数をメイン関数の後に移動してみましょう

#include <stdio.h>

void main() {
  int x = 1;
  int y = 2;
  int z = add(x, y);
  printf("xとyの和は%dです\n", z);
}

int add(int a, int b) {
  int c = a + b;
  return c;
}

add関数の位置を変える

\footnotesize \textcolor{lime}{ずんだもん:} とりあえず実行する事はできたのだ

\footnotesize \textcolor{pink}{四国めたん:} ただ C4013 関数 add は定義されていません。int 型の値を返す外部関数と見なします。 と云うワーニングが出ていますわね

ワーニング

関数を宣言してみましょう

\footnotesize \textcolor{lime}{ずんだもん:} ところでワーニングがでないようにはできないのか?

\footnotesize \textcolor{pink}{四国めたん:} できますわ

\footnotesize \textcolor{pink}{四国めたん:} このような場合には、関数を使用する前に宣言を行っておけばいいのですわ

\footnotesize \textcolor{lime}{ずんだもん:} 関数の宣言

\footnotesize \textcolor{pink}{四国めたん:} はい、 関数の定義 から波括弧"{}"以下の処理の本体を省略した感じですわ

\footnotesize \textcolor{lime}{ずんだもん:} 具体的な形式をおしえてほしいのだ

\footnotesize \textcolor{pink}{四国めたん:} 戻り値の型 関数名(引数1の型 引数1の名前, 引数2の型 引数2の名前, ...);となりますわね

\footnotesize \textcolor{pink}{四国めたん:} ちなみに最後のセミコロンは必須ですわ

\footnotesize \textcolor{lime}{ずんだもん:} 忘れないようにするのだ

\footnotesize \textcolor{pink}{四国めたん:} なお、戻り値の型や関数名、引数の型は 関数の定義 と完全に一緒でないといけませんわ

\footnotesize \textcolor{lime}{ずんだもん:} りょうかいなのだ

\footnotesize \textcolor{lime}{ずんだもん:} もう少し具体的に教えてほしいのだ

\footnotesize \textcolor{pink}{四国めたん:} それではワーニングが出ている、サンプルコードに 関数の宣言 を追加してみますわね

#include <stdio.h>

int add(int a, int b);

void main() {
  int x = 1;
  int y = 2;
  int z = add(x, y);
  printf("xとyの和は%dです\n", z);
}

int add(int a, int b) {
  int c = a + b;
  return c;
}

関数の宣言を追加

\footnotesize \textcolor{lime}{ずんだもん:} 今度はワーニングが出ていないのだ

もう少し関数の宣言

関数の宣言引数の名前 は、 関数の定義 で使用した 引数の名前 と同じである必要はありません

引数の型 さえ合っていればOKです

例えばサンプルプログラムのadd関数の宣言ですが、int add(int x, int y);としても問題ありません

まぁ、あえて異なる名前を使用する必要性も無いのですが…

ただ 関数の宣言 では、 引数の型 さえ指定していれば 引数の名前 を省略してもOKです

例えばサンプルプログラムのadd関数の宣言ですが、int add(int, int);としても問題ありません

関数の宣言 での 引数の名前 の省略は、意外に多く使われるテクニックですので、覚えておいてください

関数の重複定義はできますか?

\footnotesize \textcolor{pink}{四国めたん:} とりあえず、整数同士の和を求める関数の定義はできましたわ

\footnotesize \textcolor{lime}{ずんだもん:} ワーニングもなくなったのだ

\footnotesize \textcolor{pink}{四国めたん:} 次は浮動小数点数同士の和を求める関数の定義を追加してみましょう

#include <stdio.h>

float add(float a, float b) {
  float c = a + b;
  return c;
}

int add(int a, int b) {
  int c = a + b;
  return c;
}

void main() {
  int x = 1;
  int y = 2;
  int z = add(x, y);
  float d = 3.0;
  float e = 4.0;
  float f = add(d, e);
  printf("xとyの和は%dです\n", z);
  printf("dとeの和は%fです\n", f);
}

関数の重複エラー

\footnotesize \textcolor{pink}{四国めたん:} とりあえず、戻り値と引数の型をfloatに変えた関数addを追加してみましたわ

\footnotesize \textcolor{lime}{ずんだもん:} でもエラーが出ているのだ

\footnotesize \textcolor{pink}{四国めたん:} はい、 C2084 関数 float add(float,float) は既に本体を持っています。 と云うエラーが出てしまいましたわ

\footnotesize \textcolor{lime}{ずんだもん:} なにが問題なのだ?

\footnotesize \textcolor{pink}{四国めたん:} 実は、C++などの言語では、 異なる型の引数 を持つ 同じ名前 の関数を定義できるのですわ

\footnotesize \textcolor{lime}{ずんだもん:} そうなのか?

\footnotesize \textcolor{pink}{四国めたん:} はい、 関数のオーバーロード と呼ばれていますわね

\footnotesize \textcolor{lime}{ずんだもん:} でも、今回はエラーが出ているのだ

\footnotesize \textcolor{pink}{四国めたん:} C言語の場合には 関数のオーバーロード は許可されていませんわ

\footnotesize \textcolor{lime}{ずんだもん:} 残念なのだ

\footnotesize \textcolor{pink}{四国めたん:} 今回は、素直に関数名をadd_floatに変えて実行してみましょう

#include <stdio.h>

float add_float(float a, float b) {
  float c = a + b;
  return c;
}

int add(int a, int b) {
  int c = a + b;
  return c;
}

void main() {
  int x = 1;
  int y = 2;
  int z = add(x, y);
  float d = 3.0;
  float e = 4.0;
  float f = add_float(d, e);
  printf("xとyの和は%dです\n", z);
  printf("dとeの和は%fです\n", f);
}

floatの足し算

\footnotesize \textcolor{lime}{ずんだもん:} 今回はエラーなしに「xとyの和は3です」、「dとeの和は7.000000です」と表示されたのだ

\footnotesize \textcolor{pink}{四国めたん:} はい、しっかりと和の計算が行われていますわね

関数の引数はコピーです

\footnotesize \textcolor{lime}{ずんだもん:} ところで、ひとつ疑問があるのだが…

\footnotesize \textcolor{pink}{四国めたん:} なんでしょう

\footnotesize \textcolor{lime}{ずんだもん:} 関数の引数が、関数内で変更された場合に、関数を呼び出した側に影響があるのか?

\footnotesize \textcolor{pink}{四国めたん:} 確認してみましょう

#include <stdio.h>

void copy(int a, int b) {
  a = b;
  printf("aの関数内の値は%dです\n", a);
  return;
}

void main() {
  int x = 1;
  int y = 2;
  printf("xの元の値は%dです\n", x);
  copy(x, y);
  printf("xの後の値は%dです\n", x);
}

\footnotesize \textcolor{pink}{四国めたん:} こんな感じでしょうか?

\footnotesize \textcolor{lime}{ずんだもん:} そうそう

\footnotesize \textcolor{pink}{四国めたん:} 今回は、関数copy内で"b"の値を"a"に代入して変更していますわ

\footnotesize \textcolor{lime}{ずんだもん:} 結果として、メイン関数内でcopy関数を呼んだ後に"x"の値が変わっているかを知りたいのだ

\footnotesize \textcolor{pink}{四国めたん:} それでは実行してみましょう

引数のコピー

\footnotesize \textcolor{lime}{ずんだもん:} 「xの元の値は1です」、「aの関数内の値は2です」、「xの後の値は1です」となったのだ

\footnotesize \textcolor{pink}{四国めたん:} 結果を見る限り、関数copy内での引数の変更は、メイン関数には影響していないようですわね

\footnotesize \textcolor{lime}{ずんだもん:} たしかに…

\footnotesize \textcolor{pink}{四国めたん:} 実は、関数呼び出しの際、引数には与えられた値のコピーが渡されるのですわ

\footnotesize \textcolor{lime}{ずんだもん:} つまり、関数の定義で与えられた引数と、関数の呼び出し時に引数として渡された変数とは、関係ないということか?

\footnotesize \textcolor{pink}{四国めたん:} その通りですわ

\footnotesize \textcolor{pink}{四国めたん:} 結論としては、C言語では関数の引数を使って関数内から値を直接戻す事はできないということですわ

\footnotesize \textcolor{lime}{ずんだもん:} 直接、値を戻すには、 関数の戻り値 を用いるしかないということか…

\footnotesize \textcolor{pink}{四国めたん:} ただ、間接的に引数を使って値を戻す事は可能ですが、その方法は後の回で説明しますわ

\footnotesize \textcolor{lime}{ずんだもん:} がまんするのだ

まとめ

\footnotesize \textcolor{pink}{四国めたん:} お疲れさまでした

\footnotesize \textcolor{lime}{ずんだもん:} おつかれさまなのだ

\footnotesize \textcolor{pink}{四国めたん:} 関数 については色々と説明することが多くあるのですが、初歩の初歩としての説明は以上ですわ

Discussion