ベイジアン研究所

技術(人工知能、数学等)と心理の話をしています。

【C言語入門】関数編1

0. 関数とは
プログラミングで言う関数とは、数学における関数とは意味が異なります。同じような処理をいちいち全て書くのでは、作業効率も悪いですし、間違えも増えます。そのような「同じ処理」をひとかたまりにしたものを、「関数」と呼びます。

C言語のプログラムの冒頭部分である、

#include <stdio.h>

int main(void)
{
    ...
    return 0
}

の、「main」は関数名です。この関数はmain関数と呼ばれる特殊な関数で、実行時に必ずこの関数が実行されます。 f:id:camelsan:20200926205603p:plain

関数を使って次のようなプログラムを書く事ができる。

#include <stdio.h>

int triangle(int n_1, int n_2)
{
    int measure;
    measure = n_1 * n_2 / 2;
    return measure;
}

int main(void)
{
    print("%d", triangle(5, 6));

    return 0;
}

「triangle」と言う関数は、底辺がn_1、高さがn_2の三角形の面積を求めて返す関数である。main関数で、底辺が5、高さが6の三角形の面積を求めて表示している。

printfやscanfなどもC言語にもともと備わっている関数であり、C言語が提供する関数のことを「ライブラリ関数」と言う。

1. 関数の定義
関数とは、処理の塊の事であるが、イメージ的には、値を入力して何らかの値を出力する装置だと思えば良い。 f:id:camelsan:20200926210046p:plain

関数の定義に必要な要素は以下の図のようなものである。 f:id:camelsan:20200926211735p:plain

  • 関数頭部
    関数の名前と使用を記述する部分。関数頭部の中に次のような要素が含まれている。
    ・返却値型
     関数が戻す値の型。
    ・関数名
     関数の名前。名前で関数が呼び出される(後述)。
    ・仮引数並び
     補助的な指示を受け取るための変数である仮引数の宣言。
     型を宣言する必要がある。

  • 関数本体
    複合文で構成される。関数の中でのみ利用する変数があれば、その中で宣言・利用する。ただし、仮引数と同じ名前の変数を宣言することはできない。

2. 関数の呼び出し方法
関数を呼び出して、関数内の処理を実行させるためには、関数呼び出し演算子と言うものを用いる。簡単に言えば、関数名に仮引数の値を代入したものを書けば良いだけである。例えば、冒頭のプログラムでは、

triangle(5, 6);

で関数「triangle」が実行される。一般に関数呼び出し演算子とは次のようなものである。

  • 関数呼び出し演算子x(arg)
    関数xに、実引数argを渡して呼び出す。関数xが返却した値を生成する。

「関数呼び出し式」とは、関数呼び出し演算子を用いた式のことである。

関数が呼び出されて、値を返してmain関数がに戻されるまでのフローを図にして示す。 f:id:camelsan:20200926220707p:plain

引数のやり取りを、値渡しと言い、仮引数は実引数のコピーとなる。つまり仮引数を変更しても、実引数にはなんの影響もない。