ポインタパラメータはいつ使いますか?参照パラメータはいつ使用しますか?

2563 ワード

0.パラメータとして作用するポインタと参照の共通の特徴は、いずれも関数で実パラメータオブジェクトを変更できることであり、標準Cでは参照パラメータがなく、ポインタパラメータしか使用できないことである.
1.関数パラメータ伝達数値について、伝達ポインタと伝達参照の唯一の利点は、コピーを回避することであり、同時に実パラメータが変更されるリスクをもたらすが、constによってできるだけ回避することができる.
2.実パラメータを変更する目的で、ポインタの参照に対する利点は、空の概念*(まだ作成されていないオブジェクト、空のポインタは表すことができ、参照は空の概念を表すことができない)を入力する必要がある場合、ポインタのもう一つの利点は、参照がコードを理解するのに不利であることです.例えば、問題:(例えば、void xchange1(int *n1,int *n2)または参照パラメータ(例えば、void xchange2(int &n1,int &n2))である.funを呼び出す場所では,piが指す内容がfunで変化する可能性があり,riへの影響は見えないことを開発者はすぐに警戒できる.constを使うと言う人もいるかもしれませんが、それも定義された場所で、呼び出された場所では見えません.コードを読む人はもっと見なければなりません.
3.実パラメータを変更する目的で、参照はポインタの柔軟性を低下させるためのリスクがあるため、ポインタパラメータはデータの参照を関数に伝達するだけでなく、関数内でこのポインタを変更することもでき、すなわち、関数内部で呼び出しドメインの変数(オブジェクトだけでなく)を変更することができる.
4.参照と比較して、ポインタにはこれらの特徴があります.ポインタ変数は繰り返し割り当てられたり変更されたりすることができます(参照はできません.割り当てられた値は変更できません)ポインタ変数は空にすることができます(参照は特定のオブジェクトを指す必要があります).
#include 
#include 
using namespace std;
void xchange1(int *n1,int *n2);
void xchange2(int &n1,int &n2);
int main(void)
{
    int num1 = 9,num2 = 0;
    cout<' '<cout<' '<cout<' '<"pause");
    return 0;
}
void xchange1(int *n1,int *n2)
{
    auto temp = *n1;
    *n1 = *n2;
    *n2 =temp;
}
void xchange2(int &n1,int &n2)
{
    auto temp = n1;
    n1 = n2;
    n2 = temp;
}