値渡し(Call by Value)と参照渡し(Call by Reference)

初心者には以外と難しい「値渡し(Call by Value)」と「参照渡し(Call by Reference)」

C言語では関数に複数の引数(Parameter)を渡すことができます。

引数の2つのタイプ

引数(Parameter)の渡し方には2種類あり、その値そのものを渡す「値渡し(Call by Value)」
その変数への参照(アドレス)を渡す「参照渡し(Call by Reference)」があります。

2つの違いには「値渡し(Call by Value)」は渡された関数内で
値を変更しても呼び出し元の変数には影響は与えませんが、「参照渡し(Call by Reference)」
呼び出し元の変数に影響を及ぼします。

利用例

初心者の頃はこの違いがよくわからず予期せぬ不具合に見舞われました。

以下のサンプルではsub()関数への1つ目の引数が「値渡し(Call by Value)」
2つ目の引数が「参照渡し(Call by Reference)」です。

実行結果は

となり、「値渡し(Call by Value)」で渡されたものは
呼び出し元に影響を与えませんが、「参照渡し(Call by Reference)」で渡されたものは
呼び出し元に影響を与えることができます。

関数は1つしか戻り値を持てませんが、「参照渡し(Call by Reference)」を使うことで
複数の変数への影響を与えることが可能になります。

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

関連記事

no-img

C言語のfor文-繰り返し(ループ)制御

繰り返し(ループ)処理を行うfor文 for文は繰り返し(ループ)処理を行いたい場合に使用する

記事を読む

no-img

C言語の演算子の種類

C言語の演算子の種類 C言語にはいくつかの演算子と呼ばれる記号があります。 それを以下に示し

記事を読む

no-img

C言語のカッコ、「{」や「}」は省略しない方が良い

C言語では制御文(if-else,for,while)で実行する文が 1行の場合は中括弧の「{」や

記事を読む

keybord_black

C言語での条件分岐-switch文

C言語での条件分岐-switch文 switch文はcaseで指定した値と一致した時に処理を行うた

記事を読む

no-img

C言語の統合開発環境として「VISUAL C++ 2010 EXPRESS」をインストールしました

C言語の統合開発環境として「VISUAL C++ 2010 EXPRESS」を インストールしまし

記事を読む

SQLServer

C言語のプリプロセッサー「#define」

プリプロセッサー「#define」 プリプロセッサーはソースファイルをコンパイルする前に 処

記事を読む

keybord_black

C言語での無限ループの作り方

無限ループって永久に抜けないの? 会社に入って始めてプログラムを作り始めた頃は「無限ループ(繰

記事を読む

no-img

C言語の変数の型

C言語の型 C言語での定義されている型の種類 C言語では変数を確保する際に「型」を指定する必要が

記事を読む

keybord_black

繰り返し(ループ)制御 do-while文

do-while文での繰り返し do-while文は繰り返し(ループ)処理を行いたい場合に使用する命

記事を読む

keybord_black

C言語のwhile文-繰り返し(ループ)制御

繰り返し(ループ)処理を行うwhile文 while文は繰り返し(ループ)処理を行いたい場

記事を読む

SQLServer
C言語のプリプロセッサー「#define」

プリプロセッサー「#define」 プリプロセッサーはソースファ

keybord_black
C言語での無限ループの作り方

無限ループって永久に抜けないの? 会社に入って始めてプログラムを

no-img
C言語のカッコ、「{」や「}」は省略しない方が良い

C言語では制御文(if-else,for,while)で実行する文が

keybord_black
C言語での条件分岐-switch文

C言語での条件分岐-switch文 switch文はcaseで指定し

no-img
C言語の統合開発環境として「VISUAL C++ 2010 EXPRESS」をインストールしました

C言語の統合開発環境として「VISUAL C++ 2010 EXPRE

→もっと見る



PAGE TOP ↑