引数とは? わかりやすく解説

ひき‐すう【引数】

読み方:ひきすう

《argument》コンピューターのプログラムやアプリケーションソフトにおいて、関数やサブルーチンを利用する際に受け渡す値。関数やサブルーチンは、受け渡された値を元にして処理を行い、結果となる値を返す。


引数

述語項または複合項に付随する項。
例: f(1,X)の1およびX

引数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/08/16 16:31 UTC 版)

引数(ひきすう、英: parameter, argument)は、数学における関数やコンピュータプログラムにおける手続きにおいて、その外部と値をやりとりするための特別な変数、あるいはその変数の値のことである。

数学や最適化問題に関するそれ(「パラメータ」とカタカナで表現されることが多い)については「媒介変数」の記事を参照のこと。以下は専らコンピュータプログラミングに関して説明する。

サブルーチン・関数・メソッド等を定義する時に、外部から値を渡される特別な変数として指定されるのが仮引数。関数(等)を呼出す式において、仮引数に対応する式(あるいはその値)が実引数である。実行時には、実引数の値を仮引数が受け取る。

「引数」を「いんすう」と読む読み方もある[1][2]が、術語としては変則的に湯桶読みして「ひきすう」としている。数学分野で因数(factor)との取違えを防ぐためといった理由もある。

仮引数

仮引数(かりひきすう、かびきすう、parameter、formal parameter (formal argument))とは、手続き (プロシージャ)で定義される変数のうち、実行時に呼び出し元から渡される(実引数の)値を受けるものをいう。例としてC系言語における定義を挙げる:

int sum(int addend1, int addend2)
{
    return addend1 + addend2;
}

上の定義では、

  • int 型の仮引数 addend1
  • int 型の仮引数 addend2

2つを伴った関数 sum を定義している。定義の中で addend1 と addend2 が変数のように使用されていることに注目されたい。

実引数

実引数(じつひきすう、argument、actual argument (actual parameter))とは、プロシージャを呼び出す際に渡す値のことで、プロシージャの挙動(動作や結果)に作用する。変数やリテラルを含む式を指定できる。C系言語において前に示した例中の関数 sum を用いた例を挙げる:

 sum(123, 456);

上の文は、

  • 仮引数 addend1 に対応する実引数 123
  • 仮引数 addend2 に対応する実引数 456

2つを関数 sum に渡している[3]。

評価戦略

値渡し

値渡し(あたいわたし、call by value)は右辺値を渡す方法で、実引数として変数を渡したとしても、その値のみが渡される。もちろん即値や複雑な式を渡すこともでき、式の評価結果が渡される。その仕組みとしては、独立した新たな変数が関数内に用意され、元の値がコピーされる。そのため変数を渡したとしても、元の変数が変更されるという事はない。

これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。またそもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる(ただし、代入が存在しない以上コピーをとる必要もない)。

値渡しを採用した言語としてはC言語、ML、APL、Scheme、Java等が挙げられる。

ポインタ渡し

アドレス渡し(call-by-adress)とも呼ぶ。 C言語やC++においてオブジェクトの場所(メモリアドレス)を値として保持するポインタを値渡しすると、値渡しでありながら後述の参照渡しと似たような効果を得ることができる。このため、ポインタを値渡しすることを単なる値渡しと区別して、俗にポインタ渡しなどと呼ぶ事がある。

名前渡し

ALGOLで採用されていた特徴的な機能の一つである。名前渡しでは値でも参照でもなく、式がそのまま渡される。基本的には参照渡しのように振る舞うが、式を参照するごとに値を計算して取り出す事が特徴である。C言語のプリプロセッサのマクロ展開と似ているが、引数と、ローカル変数が衝突しないように配慮はされる。 次のような例は名前渡しに特徴的な動作と言われる。

swap(x,y) {
 tmp = x;
 x = y;
 y = tmp;
}

この例に対し、x=i, y=a[i]という"式"を渡すとする。仮にi=2だったとすると、

tmp = x;
xはiを渡されており、かつi=2と仮定したので、x=i=2となり、tmpは2になる。
x = y;
xはiを渡されているのでiがyの値になる。yはa[i]を渡されており、かつi=2と仮定したので、iはaの2番目の値になる。
y = tmp;
yはa[i]を渡されているが、前手順によりiはa[2]になっている。従ってy=a[a[2]]となる。最初の手順によりtmpは2なので、a[a[2]]の値が2になる。

結果として、「iとa[i]の変数値を交換する」という期待に反し、予想もしない意外な挙動を示すこととなる。

このような複雑さもあって、ALGOL以外で名前渡しが採用された事例はほとんどない[4]。

変数渡し

変数渡し(へんすうわたし、call by variable)は、変数そのもの(左辺値)を渡す方法で、この場合は仮引数に対する操作がそのまま実引数(渡された変数)に影響する。 多くの言語では(とくに配列のようなデータ構造を戻り値にできない場合)戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。

参照渡し(さんしょうわたし、call by reference)はその実装手段の一つ(と見ることもできる[5])。変数に対する参照(アドレス情報)を渡す方法である(これは言語側が勝手に行う。C言語のように明示的にアドレス演算子を使うものは参照渡しとは呼ばない)。

その他、値渡しと同じようにコピーを渡しておいて、関数/サブルーチンからのリターン時に元の変数に変更結果をコピーしなおす方法もある(これは変数の共有(エイリアス)や再帰呼出しがあると奇妙な結果になることがある)。PL/Iでは、どちらの方法で実装しても良いと規定されている。

原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。これは特にcall by indexと呼ばれている。

他に変数渡しをサポートする言語としては、Pascal、Perl、C++、C#、Quick BASIC等の構造化BASICなどが挙げられる。

なお変数渡しの関数・サブルーチンに、実引数として変数以外(右辺値)を渡した場合にどうなるかは、言語によって異なる。そのような操作が禁止されており、エラーが発生する言語(Pascal等)、テンポラリな変数を作成し、リターン時にそれを捨ててしまうため、値渡しと同じことができる言語(Quick BASIC等)、「未定義動作」をひきおこし、何が起こるか全く予測がつかない言語(FORTRAN等)がある。C++ではconst修飾されていない型への参照に右辺値を渡すとエラーになるが、const修飾されていれば一時オブジェクトが作成され、また右辺値のみを参照できる「右辺値参照」が存在する。

値渡しによる引数の変更

C言語は値渡しのみをサポートするが、変数のポインタ(メモリアドレス)を取得することが可能であるため、変数へのポインタを値で渡す事で元の変数を変更できる。オフセット計算により配列や構造体の一部分を参照するコードも容易に記述できる。

しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、あくまでも値渡しによる参照渡しのエミュレートである。参照渡しをサポートする言語でも内部的には同様の操作を行っているが、それは何らかの意味で言語の保護下にある参照となる。

参照の値渡し

参照渡しで言うところの「参照」と呼ばれているものと、特定の言語で「参照」と呼ばれているものが必ずしも同じでない事には注意が必要。例えば、Javaは参照型を扱うための『Javaの「参照」』を持つが、これはPascal等のポインタ相当で、『参照渡しの「参照」』とは概念が違うため、『Javaの「参照」』を渡しても参照渡しであるとは言えない。C言語の「ポインタの値渡し」と同じである[6] 。これは、Javaの参照型と似た参照型と、Javaのプリミティブ型に近い値型を持つC#を見ると理解しやすいだろう。C#では、特に指定しなければ参照型も値型も値渡しされるが、引数に ref もしくは out を使用する事によって参照渡しにする事ができる。『C#の値型』を渡すから値渡し、『C#の参照型』を渡すから参照渡しとはならない。

例:Pascalの変数渡し

Pascalのプロシージャ (procedure) や関数 (function) では、原始型 (integer, realなど) の値渡しと変数渡しのどちらでも行える。変数渡しの場合はプロシージャ・関数の引数にvarを付ける。

{ 手続き swap 内で a,b の値を入れ替える。
  sampleの i,j は変数渡しされ、aとi、bとjは同じアドレスを指して
  いるので、i,jの値は入れ替わる。 }

procedure swap(var a,b:integer);  { var をつけると変数渡し }
  var tmp:integer;
  begin
    tmp := a; a := b; b := tmp
  end;

procedure sample();
  var i, j:integer;
  begin
    i := 5;
    j := 10;
    swap(i, j);
    ... { iは10, jは5になる }
  end;

遅延評価

Haskellなどの遅延評価型関数言語に見られる形態で、値が実際に必要になるまで計算を行わない方法。概念上は、計算方法を遅延したthunkと呼ばれるオブジェクトが渡っていると考えられる。

脚注

  1. ↑ KAKASI (Kanji Kana Simple inversion program) MIT
  2. ↑ Javascript練習 09 京都産業大学
  3. ↑ ちなみに、上の文の結果は 579 である
  4. ↑ とはいえ中島秀之によれば、DEC 10 Prologの移植に際して、「修羅場を見た」と述べている。
  5. ↑ 変数以外から成る任意の式に対して、その左辺値というものは考えづらいため。あたかも名前のない変数がテンポラリに作られるかのように振舞うものもある。
  6. ↑ JavaHouse-Brewers の議論

関連項目


引数

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2016/03/08 15:17 UTC 版)

「exec」の記事における「引数」の解説

path - 新プロセスイメージとして実行すべきファイルのパス名を指定する。 file - 新プロセスイメージとして実行すべきファイルのパス名を指定する。ただしスラッシュが含まれていない場合は環境変数 PATH を使って実行すべきファイルのパス名を検索する。 arg0 - 実行ファイルの名前(へのポインタ)。arg0 から新プロセスイメージに渡される引数のポインタが続く。arg0 は通常 path または file と同じである。arg0 を使って自身の位置を知ろうとする実行ファイルもあるが、それが正しいかどうかは保証されない。 argv - 新プロセスイメージに渡す引数群へのポインタ配列。 envp - 環境変数群のポインタ配列。 envpの指す配列は、ヌル終端の文字列へのポインタ配列であり、個々の文字列は次の形式である。 name=value ここで、name は環境変数名、value はその変数の値である。envp 配列の最後には必ずnullがなければならない。envp 自体がnullの場合は、現在の環境変数設定をそのまま受け継ぐ。

※この「引数」の解説は、「exec」の解説の一部です。
「引数」を含む「exec」の記事については、「exec」の概要を参照ください。

ウィキペディア小見出し辞書の「引数」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ。

引数

出典:『Wiktionary』 (2021/08/21 06:07 UTC 版)

この単語の漢字
引 数
ひき
第二学年
すう
第二学年
湯桶読み

名詞

引数 (ひきすう)

  1. (数学) 関数の値を決定するための変数。パラメータ。
  2. (情報技術) 関数・メソッド・モジュール等を呼び出す際に外部と値をやりとりするための変数。パラメータ。

発音(?)

類義語


「引数」の例文・使い方・用例・文例

  • ある関数がとることのできる引数の数
Weblio日本語例文用例辞書はプログラムで機械的に例文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。


英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「引数」の関連用語

引数のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



引数のページの著作権

   
デジタル大辞泉デジタル大辞泉
(C)Shogakukan Inc.
株式会社 小学館
K-PrologK-Prolog
Copyright (C) 2026 K-Prolog All Rights Reserved.
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの引数 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのexec (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。
Text is available under Creative Commons Attribution-ShareAlike (CC-BY-SA) and/or GNU Free Documentation License (GFDL).
Weblioに掲載されている「Wiktionary日本語版(日本語カテゴリ)」の記事は、Wiktionaryの引数 (改訂履歴)の記事を複製、再配布したものにあたり、Creative Commons Attribution-ShareAlike (CC-BY-SA)もしくはGNU Free Documentation Licenseというライセンスの下で提供されています。
Tanaka Corpusのコンテンツは、特に明示されている場合を除いて、次のライセンスに従います:
 Creative Commons Attribution (CC-BY) 2.0 France.
この対訳データはCreative Commons Attribution 3.0 Unportedでライセンスされています。
浜島書店 Catch a Wave
Copyright © 1995-2026 Hamajima Shoten, Publishers. All rights reserved.
株式会社ベネッセコーポレーション株式会社ベネッセコーポレーション
Copyright © Benesse Holdings, Inc. All rights reserved.
研究社研究社
Copyright (c) 1995-2026 Kenkyusha Co., Ltd. All rights reserved.
日本語WordNet日本語WordNet
日本語ワードネット1.1版 (C) 情報通信研究機構, 2009-2010 License All rights reserved.
WordNet 3.0 Copyright 2006 by Princeton University. All rights reserved. License
日外アソシエーツ株式会社日外アソシエーツ株式会社
Copyright (C) 1994- Nichigai Associates, Inc., All rights reserved.
「斎藤和英大辞典」斎藤秀三郎著、日外アソシエーツ辞書編集部編
EDRDGEDRDG
This page uses the JMdict dictionary files. These files are the property of the Electronic Dictionary Research and Development Group, and are used in conformance with the Group's licence.

©2026 GRAS Group, Inc.RSS