2012-03-31 4 views
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]); 
} 

値による結果-通過と通過することにより、名前の両方のためにスワップが呼び出された後のVal、リストの値がどうなりますか。

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

私が推測したところから、それは価値観:val = 2、list = {1,1,3,4,5}とname:val = 3、list = {1,2,1,4、 5}。私はそれらの結果について非常に不確かです。

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

答えて

0

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

0

このコードは、スワップで

が、これはあなたがvalは[ヴァル]ヴァル=リストで変更見ることができるように

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]); 
} 

起こるものですなぜこれが名前 によってパスの問題の一つを説明しますそしてそれはあなたが値結果によってはもう

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 
} 
を渡すためとして

を渡したものと同じヴァルではありません

私はこれが役に立ったと思っています

関連する問題