2017-02-23 18 views
0

私はC++を初めて使用しており、以前はMATLABのみを行っていました。C++関数の入力による引数の参照とポインタによる呼び出し

My Qは、値、参照、およびポインタで変数を呼び出す次の関数の入力引数です。

void SwapbyValue (int a, int b){ 
// Usual swapping code 
} 

void SwapbyRef (int &a, int &b){ 
// Usual swapping code 
} 

void SwapbyPoint(int *a,int *b){ 
//Usual swapping code 
} 

私のQは、上記の機能がどのように動作するかについてではなく、私はそれらを呼び出す方法に関するものではありませんので、私はコードを残してきました。だから、i1と12がintのとき、SwapbyRef(i1、i2)、SwapbyRef(i1、i2)、SwapbyPoint(& i1、& i2)とタイプすることで上記の関数を呼び出すことができます。

私の人生はわたしには分かりません。さて、私は、最初の関数が値をとり、理にかなっていることを知っています。しかし、2番目の関数では、関数が定義されているときに入力を&aと設定し、ただaではなく、まだ実行しているので、i1とi2の呼び出しは意味をなさない。 3番目の例でも、入力引数をポインタとして設定します。つまり、*aですが、呼び出すときには&a(0x7956a69314d8など)を渡しています。

誤った種類の入力を関数に渡すと、なぜそれが実行されますか? たとえば、Matlabの類推によって、charをint関数に渡すように見えます。助けて!

答えて

4

int &aはintへの参照です。つまり、すでに存在するすべてのint変数を受け入れます。たとえば、SwapbyRef(4, 5)SwapbyRef (int &a, int &b)を使用しています。なぜなら、4と5はメモリのどこかに変数として存在しない一時的なintであるからです。

Btw、おそらくC++のリファレンスが何であるかを調べるべきです。それがあなたを最も助けてくれると思います。

+0

ありがとうございます。この例はわたしを助けました。私はオブジェクトのアドレスと参照があいまいであることがわかります。 – DeKonTiki

+1

@DeKonTikiまた、覚えておくべき点は、パラメータとしてポインタを使用して、その値が変更されたときに関数内で変更されるだけでなく、関数のコンテキスト外でも変更される点です。これは、関数にアドレスを渡す理由です( '&i1')。 – 4DaMouf

関連する問題