掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
戻り値 (ID:24605)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> i:=MyFunc(2); というのは > ① MyFuncが2のとき(MyFuncに渡した引数が2のとき) > ② functionで処理してResultに入った値を > ③ iに代入するということですか!? 正解です。 function Func(a:Integer):Integer; begin Showmessage(IntToStr(a)); Result := a + 10; end; この関数を呼び出すとき、 var Func: Integer; Result: Integer; というグローバル変数がメモリ上に既に用意されています。 この処理は、Delphi 等の処理系がコンパイル時にその仕掛けを加えます。 実際に、上記2つの変数が用意されているかどうかは、私が Delphi を作ったわけではないので解りませんが、用意されたと言える仕掛けが作られるという事です。 したがって、用意されていると理解して問題ありません。 i := Func(2); とした場合、 Func 内の Showmessage(IntToStr(a)); の行で '2' を表示するのは納得できますよね。 Result := a + 10; により、 用意された Result変数に 2 + 10 = 12 が代入されます。 function Func(a:Integer):Integer; begin Showmessage(IntToStr(a)); Func := a + 10; // ここが違う end; となっていれば、用意された Func変数に 12 が代入されます。 procedure Button1Click(Sender: TObject); var i: Integer; begin i := Func(2); end; のコードは var Result: Integer; procedure Button1Click(Sender: TObject); var i: Integer; a: Integer; begin a := 2; Result := a + 10; i := Result; end; と処理されます。 どんな言語でも最終的にはコンパイラによりマシン語に翻訳されるのですが、 その翻訳されたマシン語では、こういう流れになっています。 i := Func(2); と記述すれば、上記のコードになるようにコンパイラが処理します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.