C++におけるポインタと参照の違い、および参照とアドレス&の違い

2620 ワード

一.ポインタと参照の違い
ポインタにとって、それはアドレスであり、このアドレスは数値であり、この数値は0(空のポインタ)であってもよいし、他のものであってもよい.すなわち、ポインタは何も指さなくてもよい.
引用にとって、彼はあだ名で、あだ名は必ず「ある存在物体」のあだ名なので、引用は空ではなく、空の引用は存在しない.例えば、私たちは明ちゃんにあだ名をつけました.明らかに、私たちが明らかにしたとき、明ちゃんのことを言っていました.参照の操作は、変数の直接操作と全く同じです.
以上から分かるように、ポインタと参照の重要な違いは、ポインタが空であってもよいし、参照が空であってもよい.これは、私たちが参照を手に入れたとき、参照が空であるかどうかを判断する必要はありません.ポインタを手に入れたとき、私たちはそれが空であるかどうかを判断する必要があります.この点は,関数パラメータが有効か否かを判断する際によく用いられる.例:
void fun1(int *point)
{
     //           ,            ,            
     //  ,                     
     if(!point)
     {
        return;
     }
     //     
}

void fun2(int &refence)
{
     //    ,       refence    
}

修飾関数パラメータを参照すると、次のように効率が向上します.
Class Object
{//     ,                ,               
 //          };
void fun1(Object obj)
{
     //       ,obj    ,         
}
void fun2(Object &obj)
{
    //       obj    ,  ,      ,        
}
void fun3(Object* obj)
{
    if(!obj)...
    //     obj    ,  ,        
}

前述の説明によれば、ポインタは、ある時点でアドレス1を指すことができ、別の時点でアドレス2を指すことができ、例えば、
int a = 0;
int b = 1;
int *point = NULL;
point = &a;     //      ,      a
point = &b;     //     ,      b

引用は違って、引用は初期化の時だけ値をつけて、それから変えることができなくて、あだ名の例で言えば“明らかに”というあだ名が現れた時は明ちゃんを指して、それから“明らかに”というあだ名は明ちゃんに縛られて、それはしばらくして暗いあだ名に変えることができません.reference_mingming(&reference_mingmingではない)の操作はxiaomingに対する操作です.コードは次のとおりです.
int xiaoming = 1;
int &refence_mingming = xiaoming;
int xiaoan = 2;
refence_mingming = xiaoan;           // error,      

以上から、空を指すかどうかが必要な場合は、ポインタを使用する必要があります.また、ポインタを使用する必要があるオブジェクトが変化する必要がある場合は、ポインタを使用する必要があります.他の場所では一般的に引用をお勧めします.
詳細については、リファレンスとポインタの違いを参照してください.
二.アドレス&と参照するキーワードの違い:
参照するキーワードを作成する場合:
タイプ名&別名=var;
1.定義するときは初期化する必要があります.すなわち、&の前にクラス名またはタイプ名があり、&別名の後ろに必ず「=」(=左側)が付きます.
2.&後ろの別名は新しい名前で、以前は存在しませんでした.
3.参照は使用する場合、別名のみを使用し、&を使用しません.つまり、1つの参照に対して、そのキーワード&は1回のみ表示されます(定義する場合).
4.C++の「参照」の概念は、オブジェクトの別名として使用することであり、それ自体がメモリを占有する(ここでは匿名のユーザに同意せず、最終的にはポインタとしてコンパイルされるためメモリを占有する)が、オブジェクトの別名として、オブジェクト自体のすべての機能を持つため、アドレスを取得する際、自分の住所ではなく相手の住所を取っています.C++はこのように設計されています.そうしないと、多くのことができません.
5.参照に対する操作が変数に対する直接操作と全く同じである場合、参照に対するアドレス取り操作は、変数に対するアドレス取りと同等であり、下図に示すcout<
 
&住所取得時:
&がアドレス演算子である場合、変数のアドレスを取得し、ポインタ変数に支払うことを意味します.&後続は変数(既存)です.
したがって&後の変数名が既に存在するかどうかによっても,参照するかアドレスを取るかを容易に判断できる.
次に、参照とポインタの違い、および参照されるアドレスの問題を説明する例を示す.
int a=1;
int &c=a;
int *b=&a;
int main()
{
	cout<