参照渡しは、主にポインタを使用する言語で視覚化が容易です。しかし、パスカルでは、ポインタがどのようにサブルーチンを引数として渡すのかほとんど見ることができません。例えば参照渡しはどのように機能しますか?
は:
var a: array [0..2] of integer;
i : integer;
procedure swap(var x, y: integer);
var temp: integer;
begin
temp := x;
x := y;
y := temp;
end;
begin
i := 0;
a[i] := 2;
swap(i, a[i]);
end.
swap(i, a[i]);
手続き呼び出し文は、この等価擬似コードに置き換えることができますか?通訳はどのように裏で働いていますか?舞台裏
var tmpOldArrayExpression, tmpNewFirst, tmpNewSecond : integer;
tmpOldArrayExpression := i;
(tmpNewFst, tmpNewSnd) := swap(i, a[i]);
i := tmpNewFirst; { 2 }
a[tmpOldArrayEession] := tmpNewSecond; { 0 }
があなたの役に立つリンク答えはありません私のパスカルの問題のほとんど。もう一度質問してください。オンザフライ(JIT)でマシンコードをコンパイルしないインターペアでは、私の擬似コードと同じようにシーンの背後で動作しますか? – MiP
別の質問がある場合は、別の質問をしてください。インタプリタ(および/またはコンパイラ)がどのように動作するかについて書かれた書籍(多くのページが多数あります)があります。私はあなたが「私の擬似コードに似ています」とは何を意味するのか分かりません。 –
このトピックの最初の質問ですが、新しい複製を作成する必要はありません。 "C#"とはどういう意味ですか? – MiP