”本気で”エンジニアを目指すなら『TECH BOOST』キャリアから逆算された講座内容で、あなたの未来をサポートします!

【C言語超入門(第32回)】関数のデータの受け渡し方法について学ぼう

Pocket

C言語の関数にデータを渡す方法にはいくつか方法がありますが、特に重要なデータ渡しの方法が二つあります。

一つは「値によるデータ渡し」、もう一つは「参照によるデータ渡し」です。

そこで今回のC言語超入門では、「値によるデータ渡し」と「参照によるデータ渡し」について、ご説明いたします。

値によるデータ渡し

値によるデータ渡し(Call by value)とは、C言語において関数へのデータ渡し方法として、最も一般的な方法と言ってもよいでしょう。

以下のプログラム1は、変数xの値をfx_teest()関数に渡して、変数yに代入しています。

このとき、変数x、変数yは、それぞれ独立した存在であることが、値によるデータ渡しの特徴です。

この、変数x、変数yが、それぞれ独立した存在である、という特徴がよく分かるよう、
プログラム1を書き換えたのが、次のプログラム2です。

プログラム2では、プログラム1の変数yを変数xに変更して、関数fx_test()内で、変数xの値を書き換えています。

fx_test()関数内で、変数xの値を書き換えていますが、printf()関数で変数xの値を出力した結果をみますと、
変数xの値は元のまま(変数の値が書き換えられていない)であることが分かります。

参照によるデータ渡し

関数にデータを渡す方法として先に紹介しました、値によるデータ渡しの他に、参照によるデータ渡しを使うこともできます。

参照によるデータ渡しは一般的に、配列データを関数に渡すときに使用します。

参照によるデータ渡しでは、いったい何を「参照」しているのかといいますと、データのアドレスです。

データのアドレスとは、データがコンピューターのどこに存在するのかを区別するための情報で、名前のとおり、コンピューター上の住所のようなものです。

もし参照によるデータ渡しができず、値によるデータ渡しだけで配列データを関数に渡すとしたら、とても大変です。

例えば配列要素数が100個ある変数を関数に渡したいとき、値によるデータ渡しですと、100個も変数を代入しなければなりません。

参照によるデータ渡しでは、変数のアドレスを渡して、その後のデータの取り扱いは関数側に任せることで、シンプルなデータ渡しの記述を実現しています。

以下のプログラム3は、文字配列mojiを、参照によるデータ渡しで、関数fx_test()に渡しています。

参照によるデータ渡しは、関数へのデータ渡しをシンプルに記述することができる一方で、
データを受け取った関数側では、受け取った変数のデータサイズ(配列要素数)を知ることができません。

したがって参照によるデータ渡しを使う場合は、プログラマーが、データサイズを意識してプログラミングをする必要があります。

例えば、参照によるデータ渡しで文字列を受け渡しするときであれば、文字列の最後にはゼロ(NULL文字)であるというルールを使って、データサイズを把握することができます。
(参考:【C言語超入門(第15回)】配列の表現方法と文字列表現方法を学ぼう)

C言語超入門の第32回まとめ

今回のC言語超入門では、C言語の関数にデータを渡す方法として、特に重要なデータ渡しの方法である「値によるデータ渡し」と「参照によるデータ渡し」をご紹介しましたが、いかがでしょうか。

C言語では、「値によるデータ渡し」と「参照によるデータ渡し」の他にも、関数にデータを渡す方法があります。

でも、特に重要なこの二つの方法を、まずはしっかりとマスターすることが大切です。

ステップ・バイ・ステップ。焦らず一歩ずつ進んでいきましょう。

投稿者:プロナビ編集部

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

『TECH BOOST』なら、AI、IoT、ブロックチェーンなど最新技術が学べる!今流行りの技術を学んで、新たな一歩を踏み出そう!

プログラミングで挫折しそうなら、現役エンジニアにマンツーマンで相談してみませんか?オンラインのプログラミングスクール「TechAcademy」のメンターが対応。

この記事が気に入ったら
いいね!しよう

プロスタの最新情報をお届けします

あわせて読みたい

関連記事

ページ上部へ戻る