目次
プログラミングでは、コンピューターに指示する一連の処理をまとめたプログラムを「関数」と呼びます。
関数を使うことには、プログラムが読みやすくなったり、同じ処理を何度も書かずに済んだりするなどのメリットがあります。
「関数」は様々なプログラミング言語で利用できますが、関数の定義方法や呼びだし方法は各プログラミング言語によって異なります。
この記事では、C言語の関数について、定義方法から基本的な使い方まで詳しく解説していきます。
またC言語で関数を扱う際によく利用されるポインタという概念についても説明していきますので、これからC言語を学びたいという方は是非参考にしてください。
C言語の関数とはなにか
コンピュータは、プログラミングコードで与えられた値をもとに処理をし、結果を返すことでプログラムを実行します。
このようにコンピューターに指示する一連の処理をまとめたプログラムを「関数」といい、関数は様々なプログラミング言語で利用されています。
ここでは、C言語の関数について詳しく解説していきます。
C言語の関数とは?
C言語の関数とは、その文字通りC言語を使って書かれた一定の処理をするひとまとまりのプログラムです。
C言語の代表的な関数には、文字などを出力するためのprintf関数や、プログラム実行時に一番始めにプログラムを実行する役割を果たすmain関数があります。
このようにC言語であらかじめ用意されている関数を「ライブラリー関数」と呼び、一からプログラムを書かなくても役立つ便利な機能をプログラムに導入できます。
またあらかじめ用意されているライブラリー関数を利用する以外にも、関数を自作することも可能です。
関数を自作することで、ライブラリー関数では満たすことのできない独自の機能を持つ関数をプログラム内で作成、使用できます。
またプログラミングコードを一目見て機能がわかりやすいように、関数の名称を自由につけられるため、開発の効率化にも役立ちます。
関数の役割
プログラムにおける関数には、以下の3つの役割があります。
- プログラムを読みやすくする
- 処理結果さえ知っていれば簡単に利用できる
- コードの重複が防げる
一連の処理を関数の形でまとめておくことで、プログラムが読みやすくなります。
プログラムが読みやすくなることでプログラムの修正、機能の追加、削除が簡単にできるようになります。
そして関数の中身を知らなくても、処理結果さえ知っていれば誰でも関数を簡単に利用できるため、特に複数人で開発を行う場合は、作業効率のアップにもつながります。
また同じ処理をするコードを何度も書かなくてもよくなるため、プログラミングコードの重複が防げ、プログラムの処理速度上昇、保守性を高めることにもつながるのです。
関数の宣言とは?
プログラム内で使用する関数について、関数の名前や、処理内容を具体的に定義することを「関数の宣言」といいます。
ここではC言語で関数を宣言する方法について詳しく解説します。
関数の宣言方法について
C言語で関数を宣言する際は、以下の3つを定義します。
- 関数名
- 戻り値:関数の処理結果
- あれば引数
具体的には、以下のような形式でC言語の関数を宣言できます。
処理内容
}
C言語では、関数が上記のように定義されて始めてその関数を利用できるようになります。
また関数の関数名や引数、戻り値の型だけを事前に宣言する「プロトタイプ宣言」もC言語ではよく利用されます。
プロトタイプ宣言を利用することで、関数の処理内容を後から追加できます。
処理内容を後から追加することで、関数の実行時に引数の型が異なっていた場合などに発生するコンパイルエラーを回避でき、安全で信頼性の高いプログラムを作成できるようになります。
具体的には、以下のような形式でプロトタイプ宣言を行います。
関数の型について
C言語の関数には、主に以下2種類の型の関数があります。
戻り値を持たない型の関数はvoid型関数と呼ばれ、戻り値の型名をvoidに指定して以下のように宣言します。
処理内容
}
void型関数は文字を表示するprintf関数を利用する場合などに利用されます。
具体例として「Hello, World」という文字列を表示する関数を宣言してみましょう。
printf(“Hello, World”);
}
一方、戻り値がある関数を宣言する際には関数の型、詳しくは関数が結果として返す戻り値の型を定義する必要があります。
定義できる関数の型は、具体的に以下のようなものがあります。
具体例として2つの数字を足して、その結果を整数値で返すint型の関数を宣言してみましょう。
int sum;
sum = x+ y;
return sum;
}
関数の使い方
関数の宣言が完了したら、実際に関数をプログラム内で利用することができるようになります。
ここではC言語の関数の使い方について詳しく解説していきます。
関数を呼び出す方法とは
C言語では、プログラムが実行されたときに最初に呼び出されるmain関数内で宣言した関数を呼び出します。
具体的には、main関数内で以下のような形式でプログラミングコードを入力することで関数が呼び出せます。
関数名(あれば引数);
}
例として、先ほど定義した「Hello, world」という文字列を表示する関数を呼び出してみましょう。
printf(“Hello, World”);
}
void main(){
say_hello();
}
結果として「Hello, world!」が表示されます。
またC言語では、呼び出した関数の結果を変数に代入することも可能です。
戻り値の型 戻り値の変数;
戻り値の変数 = 関数名(あれば引数);
return 戻り値の変数
}
関数の引数とは
C言語において、関数に引数というパラメータを渡すことができます。
引数とは、関数が処理を行う際に渡さなければいけない必要な値や情報などのパラメータを指し、関数の処理実行時に引数を具体的に指定することで関数はパラメータをもとにプログラムを実行します。
例えば先ほど定義した2つの数字を足して、その結果を整数値で返す関数では、xとyが整数値の引数となります。
引数となる変数を宣言する場合、変数名だけでなく、引数の型を指定しなければいけないことには注意が必要です。
また引数部分にvoidを入力することで、引数がないことを明確にすることもできます。
それでは例として、先ほど定義した2つの数字を足す関数を利用して、1と2を引数に指定して足し合わせてみましょう。
int sum;
sum = x+ y;
return sum;
}
int main(){
Add_calc(1, 2);
}
上記のプログラミングコードでは、xとyが仮引数、プログラム実行時に具体的に指定する1と2が実引数とよばれます。
結果として1と2を足した「3」という値が返されます。
関数とポインタについて
C言語で関数を扱う際、ポインタという概念がよく利用されます。
ポインタとは、メモリ上における変数のアドレスを記憶するために利用する変数のことです。
プログラミングでは宣言した変数それぞれに、アドレス、すなわちメモリ上における番号が付与されます。
ポインタを利用することで、変数に付与されたアドレスをポインタとして宣言した変数に格納することができます。
関数とポインタの関係とは?
ポインタは変数のアドレスを格納できる変数です。
ポインタを使うと、複数の変数に対して一つの関数で処理できたり、配列のすべての要素を一度に取得できたりします。
そのため配列などの複数の変数を取り扱う複雑なデータ構造を引数として持つ関数を取り扱う際にポインタは役立つのです。
C言語では、変数の前に「*」をつけることでアドレスを格納できる変数、ポインタ変数を宣言でき、変数の前に「&」をつけることで、変数のアドレスを取得できます。
それでは、C言語でのポインタの具体的な扱い方をみていきましょう。
int a = 10;
int *p = &a;
printf(“*p = %d\n”, *p);
return 0;
}
このプログラムでは、まず整数型の変数aを定義して、値を10に設定しています。
その後、ポインタ変数pを定義して、&aを用いて、変数aのアドレスをポインタ変数pに格納しています。
実行結果として、*pから変数変数aにアクセスすることができ、変数aに格納されている「10」という数字が表示されます。
上記のプログラミングコードではポインタ変数の宣言方法について解説しました。
それでは、具体的にどのような場面でポインタが利用されるのかもみていきましょう。
int array[5] = {1, 2, 3, 4, 5};
int *p = array;
for (int i = 0; i < 5; i++) {
printf("%d ", *p);
p++;
}
return 0;
}
このプログラムでは、まず整数型の配列arrayを定義し、1~5の値を代入し、ポインタ変数pで配列arrayの先頭の要素のアドレスをポインタ変数pに格納しています。
そしてforループを使って、ポインタ変数pを順次インクリメントしながら、配列の全要素を出力しています。
このようにポインタ変数を利用することで、配列の全要素に効率的にアクセスすることができるようになるのです。
まとめ
この記事では、C言語の関数に関して役割から定義方法、具体的な使い方まで詳しく解説しました。
プログラム内でまとめることができる処理を、1つの関数にまとめることで、C言語でのプログラム開発をより効率的に、そして安全に進めることができます。
関数の使い方を改めてまとめると、C言語では以下の2つの手順で関数が利用できます。
- 関数名、戻り値、引数を宣言する
- main()関数内で関数を呼び出す
また関数にポインタを組み合わせることで、複雑なデータ構造を効率的に扱えるようになります。
関数はプログラミングをするうえで必須ともいえる知識です。
関数の利用に慣れていないという方、特にプログラミング初心者の方は、関数の利用になれるためにも積極的に利用していくようにしましょう。