• ベストアンサー

C言語(引数)

はじめまして。 C言語を習い始めたものです。 関数を定義するとき、よく耳にする、仮引数や実引数があると思います。 仮引数は関数の定義内で値をうけとる変数のことであり 実引数は関数を呼び出す際に渡す値を実引数というらしいのですが どこからどこまでを仮引数と呼ぶのかわかりません。 例えば、 fの関数の定義内で ↓があるとします。 (関数にする意味はないのですが、確認のためあしからず・・・) double f(double x) {     x=5;     return(x); } この場合、仮引数とよばれるものは double f(double x)の xが仮引数であって x=5;のxは仮引数と呼ばないのでしょうか?? もしそうならば void f(double x) { printf("%f",x); } のprintf("%f",x);内のxは仮引数とよぶのでしょうか? 質問の内容が意味不明かもしれませんが よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.6

仕方がないのでJIS X3010:2003から引用します。 3.15 仮引数[parameter, formal parameter, formal argument(廃止予定)] 関数宣言若しくは関数定義の一部として宣言され, 関数に入る時点で値を得るオブジェクト, 又は関数形式マクロ定義におけるマクロ名の直後の括弧で囲まれコンマで区切られた並びに現れる識別子。 「仮引数」という用語は上記のように定義されています。関数に入る時点で値を得る"オブジェクト"ですので、 double f(double x)  ← このxは仮引数 {     x=5;     ← このxも仮引数     return(x);  ← このxも仮引数 } です。 厳密な定義を調べる際は、「プログラミング言語C」をはじめとする解説書は二次情報に過ぎませんので、必ず規格書を調べるようにしましょう。

その他の回答 (6)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.7

念のため、実引数についてもJIS X3010:2003から引用しておきます。 3.3 実引数[argument, actual argument, actual parameter(廃止予定)] 関数呼出し式において, 括弧で囲まれコンマで区切られた並びの中の式, 又は関数形式マクロの呼出しにおいて, 括弧で囲まれコンマで区切られた並びの中の前処理字句の列。 この定義からも分かるように、実引数は"値"ではなく"式"です。 ですから、 int main(void) { double y = 10.0; f(y); return 0; } のfの呼び出しにおける実引数は、10.0ではなくyということになります。

  • ttschool
  • ベストアンサー率28% (18/64)
回答No.5

分かっていて、言っているのか分からないので少し補足します。 > double f(double x) > { >    x=5; >    return(x); > } > この場合、仮引数とよばれるものは > double f(double x)の xが仮引数 xは、パラメータです。引数ではありません。 この意味すら分かっていない、ほかの回答者さんは、おそらくK&Rの本を読んで理解していないのではないでしょうか? あとは、回答者php504さんの言う通りです。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.4

void f(double x) { printf("%f",x); } int main(void) { double y = 10.0; f(y); return 0; } xは仮引数を入れる変数 仮なので変数として表現するしかない x=5; のように仮の値を変更しても意味が無い(xはただの変数でxの内容が引数だからこの時点で引数は消えてしまう) 実引数は10.0 f(10.0)のようなリテラル値でもf(y)のような値の代入された変数でも使える

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

仮引数はparameter、実引数はargumentの訳語です。 英語では単なる「引数」を意味する用語はありませんが、仮引数と実引数を総称して、parameterまたはargumentと呼ぶケースはあります。 日本語で単に「引数」と呼ぶ場合、仮引数と実引数の総称である場合もあれば、文脈上、仮引数または実引数の意味で使われることもあります。両者を明確に区別する必要があり、しかも文脈からどちらのことであるかが明白でない場合は、やはり「仮引数」、「実引数」と表記すべきです。 double f(double x) {     x=5;     return(x); } ↑の場合、xはfの仮引数です。三箇所xが現れますが、すべてfの仮引数です。 次に、 void f(double x) { printf("%f",x); } の場合ですが、xはfの仮引数であり、printfの実引数です。 仮引数と実引数は、常にどちらかの立場になるわけではなく、どの関数の仮引数なのか、あるいは実引数なのかを区別する必要があります。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

関数fの中で使われている xも『引数』と表現します 別段 仮引数と呼んでも問題は少ないように思います 実際に他の関数へ引き渡す場合を実引数 関数宣言時にパラメータとして書く変数を仮引数 と表現します x=5; のx は 単に『引数』と表現するほうが一般的なように思います printf( "%f", x ); のxについても 関数f側からすれば『引数x』でprintf側からすれば 実引数として "%f"とxが与えられた といった具合かと …

参考URL:
http://ja.wikipedia.org/wiki/%E4%BB%AE%E5%BC%95%E6%95%B0
  • don_go
  • ベストアンサー率31% (336/1059)
回答No.1

>x=5;のxは仮引数と呼ばないのでしょうか?? http://www.cc.kyoto-su.ac.jp/~yamada/ap/parameter_argument.html 仮引数と実引数 >まず,引数(引き渡された数)とは,関数につけられた括弧内に >ある数値あるいは変数のことである ↑にある様に関数の括弧の外にあるので引数ではありません。 >printf("%f",x);内のxは仮引数とよぶのでしょうか? printf(~)という関数を使用するときに渡される引数なので実引数 となります。

serumnuit
質問者

お礼

返信ありがとうございます。 つまり仮引数とは double f(double x)の()内にあるxだけをいうのでしょうか? x=5;のxは関数で定義された仮引数でそれに5が代入されていると思ってしまうのですが・・・。 >>まず,引数(引き渡された数)とは,関数につけられた括弧内に >ある数値あるいは変数のことである ↑にある様に関数の括弧の外にあるので引数ではありません。 関数の括弧の外にあるというのは double f(double x)の()といういみでしょうか?? とても硬い頭ですみません。 よろしくお願いします。

関連するQ&A