C言語 入門 関数の値渡し voidとは?

C言語

戻り値がない関数を勉強したい。

voidって何?

値渡しと自作関数の関係は?

この記事を読めば、これらの悩みを解決できます。

関数や戻り値を知らない人は、過去の記事を参考にしてみてください。

この記事では、「変数として扱える関数」を勉強したので、関数に戻り値がありました。

今回は、どちらかと言えば「printf関数」や「scanf関数」のような、変数とは似ていない本格的な関数を勉強します。この関数に戻り値はありません

数字を2倍にして出力するプログラムを例に説明していきます。

冒頭でも戻り値がないと述べましたが、「なぜ戻り値を返さなくても良いのか」に注目しましょう。

では、関数のつくり方を具体的に見ていきましょう。

スポンサーリンク

「戻り値がない関数」のつくりかた

先ほどの記事でも説明しましたが、自作関数の主な構造は

・プロトタイプ宣言

・main関数(この中に自作関数)

・自作関数の説明

です。

上から順に説明していきます。

プロトタイプ宣言

プロトタイプ宣言では戻り値がないときのデータ型「void」を使います。

void nibai(int a,int b);

main関数

int main()
{
	int a,b;
	a = 5;
	b = 2;

	nibai(a,b);
}

自作関数の扱い方は、「printf」や「scanf」と同じように、そのまま書きます。

nibaiという関数は、2倍するだけでなく出力もできるため、printfは使っていません。詳しくは、「自作関数の説明」プログラムを見ればわかると思います。 

自作関数の説明

void nibai(int a,int b)
{
    a *= b;
    printf("%d", a);
}

「main関数」では「b=2」だったので、「a」に「b」を書けることで「a」を2倍できます。

このまま「a」を出力すると「5×2=10」なので、「10」が出力されます。

ここまでをまとめます。

#include<stdio.h>
void nibai(int a,int b);
int main()
{
    int a,b;

    a = 5;
    b = 2;

    nibai(a,b);
}

void nibai(int a,int b)
{
    a *= b;
    printf("%d", a);
}

この自作関数の「引数」を「自作関数の説明」に送るときは、「値渡し」の考え方を使っています。そのため、引数と関数の変数名は一致しなくても問題ないです。ですが、このサイトでは、分かりやすいように引数と関数の変数名は一致させています。

値渡しが分からない人はこの投稿を見てください。

アドレス渡しの考えを使った関数は、次の投稿で説明します。

それでは出力してみましょう。

この自作関数を使う時は、計算後に出力なども済ませるような関数にしないといけないですね。

まとめ

・「void」でプロトタイプ宣言した関数は値を返さない。

・戻り値がない関数は、結果の出力など、最後まで済ませる。

・この記事に載っている関数は、値渡しの考え方を使っている。

この3点が今回のポイントです。

次は、アドレス渡しを使った関数を勉強してみましょう。