関数の基本
関数を使用する際は、以下のようになっています。
関数名(第一引数, 第二引数, 第三引数, ...);
これを今まで使ってきたprintf関数に当てはめると以下のようになります。
printf("%s %d\n", "string", 100);
printf関数のカンマで区切られている最初の "%s %c %d\n" を第一引数、"string" を第二引数、100 を第三引数、と呼びます。
また、文字列の長さを求める関数である strlen関数は以下のように使用します。
#include <stdio.h>
#include <string.h>
int main() {
int len;
len = strlen("ABCD");
printf("%d\n", len);
return 0;
}
これを実行すると、"ABCD" の長さである 4 が出力されます。
4
strlen関数を見てみると、第一引数に "ABCD" を与えています。
そして、len という変数になにやら代入しています。
関数は、戻り値というものを持っているものがあり、strlen関数は、第一引数にとった文字列の長さを戻り値として返します。
右辺のstrlen関数は、第一引数でとった文字列の長さの値になり、この場合は 4 になるのです。
つまり、以下と同じになります。
len = 4;
関数を作成してみる
関数は自分で作成することができます。
実際に引数で与えた二つの値を足すtest関数を作成してみましょう。
以下のコードを実行します。
1 #include <stdio.h>
2
3 int test(int num1, int num2) {
4 return num1 + num2; // num1 と num2 を足して返す
5 }
6
7 int main() {
8 int i;
9
10 i = test(5, 10); // test関数の戻り値を i に代入
11
12 printf("%d\n", i);
13
14 return 0;
15 }
実行すると、以下の出力が得られたかと思います。
15
3 ~ 5行目がtest関数です。
関数は以下のように定義します。
戻り値の型 関数名(第一引数の型 変数名, 第二引数の型 変数名, ...) {
上記コードでいうと3行目に当てはまります。
int test(int num1, int num2)
この場合、戻り値の型は int 型で、引数を二つとり、二つとも int 型という意味になります。
4行目をみてみましょう。
return num1 + num2;
return は、後ろにくるものを戻り値を返すもので、今回は、num1 と num2 を足して戻り値として返しています。
return で返した値を 10行目で変数 i に代入しています。
i = test(5, 10)
よって、iには、5 と 10 を足した 15 という値が入ります。
関数を作成してみる2
以下を実行してみましょう。
1 #include <stdio.h>
2
3 void test(char* name, int age) {
4 printf("name: %s\n", name);
5 printf("age: %d\n", age);
6 }
7
8 int main() {
9
10 test("Taro", 18);
11
12 return 0;
13 }
以下の出力が得られると思います。
name: Taro
age: 18
3行目で先ほどと同じように関数を定義しています。
void test(char* name, int age)
しかし、今度は void という値が出てきました。
これは、戻り値を返さないという意味になります。
戻り値を返す必要のない関数では、この void を記述します。
引数には、文字列型である char* と整数型である int が指定されています。
4,5行目では、引数で受け取った name と age をprintf関数で表示します。
注意
また、作成した関数を使用する際は、使用するより前に関数を定義していないといけません。
以下のようにtest関数を使用する前に、関数定義を行なっていないとコンパイル時にエラーになります。
#include <stdio.h>
int main() {
test("Taro", 18);
return 0;
}
void test(char* name, int age) {
printf("name: %s\n", name);
printf("age: %d\n", age);
}
これを回避するには、使用する前に関数作成するか、以下の3行目のように宣言だけ先にする必要があります。
1 #include <stdio.h>
2
3 void test(char*, int);
4
5 int main() {
6 test("Taro", 18);
7
8 return 0;
9 }
10
11 void test(char* name, int age) {
12 printf("name: %s\n", name);
13 printf("age: %d\n", age);
14 }
0件のコメント