1

私のプログラミング言語クラスでは、名前渡しと値渡しの結果がどのように機能するかを理解しようとしています。これらが主流の言語ではほとんど使用されていないことはわかっていますが、それらがどのように機能するかを感じたいと思っています。例として (言語に依存しない):

void swap(int a, int b){
    int t;
    t = a;
    a = b;
    b = t;
}
void main() {
    int val = 1, list[5] = {1, 2, 3, 4, 5}
    swap(val, list[val]); 
}

pass-by-value-result と pass-by-name の両方で swap が呼び出された後の val と list の値はどうなるでしょうか。

説明も素晴らしいでしょう。

私が推測したところ、それは value-result: val=2, list={1,1,3,4,5} と name: val=3, list={1,2,1,4,5} を得ました。私はそれらの結果について非常に確信が持てません。

また、単一の int ではなく配列が渡されたときに、これらの両方のメソッドが機能する方法が変わりますか? 事前に助けてくれてありがとう。

4

2 に答える 2

0

このコードは、名前渡しの問題の1つを説明しています。これが理由です

スワップでは、これが起こります

void swap(int a, int b){
    int t;
    t = a; //t=val; t=1
    a = b;// val=list[val]; val=list[1]=2
    b = t;// list[val]=t; list[2]=1
}
void main() {
    int val = 1, list[5] = {1, 2, 3, 4, 5}
    swap(val, list[val]); 
}

val=list[val] で val が変更されていることがわかります。これは、渡した値と同じではありません。

値渡しの結果について

void swap(int a=1, int b=2){
    int t;
    t = a; //a=1 so t=1
    a = b; //b=2 so a=2
    b = t; //b=1 so it and it return the right parameter so list[1]=2
}

これが役に立ったことを願っています

于 2013-05-16T09:21:11.040 に答える
0

参照渡しとして名前渡しを意味する場合、結果は値渡しと同じになります。
これは、val とリスト位置 val の間で参照を切り替えているだけだからです。配列参照を渡していません。var は、値を含むメモリ ブロックへのポインタと考えてください。

于 2012-03-31T17:53:13.150 に答える