C/C++の一元オペレータ&と*の理解
一、&オペレータ
1、&はアドレス取りオペレータとして、オブジェクトまたは変数をメモリ内のアドレスと呼ぶことができます(アドレス取りオペレータは左の値にのみ使用できます):
2、&は参照オペレータとしても使用できます.ネット上では間接参照とも呼ばれていますが、実際には別の変数またはオブジェクトの別名として使用されます.
&のこのような間接参照としての使用は、C++の多くの関数に使用されるパラメータで、以下のようになっています.
注意:&参照オペレータとして注意しなければならない点は、次のとおりです.
1、&ここではアドレス演算ではなく、標識の役割を果たす.
2、タイプ識別子とは、ターゲット変数のタイプを指す.
3、参照を宣言するときは、同時に初期化する必要があります.
4、参照宣言が完了すると、ターゲット変数名に相当する2つの名前、すなわち、そのターゲットの元の名前と参照名があり、その参照名を他の変数名の別名として使用することはできません.
5、参照を宣言します.新しく定義された変数ではありません.参照名はターゲット変数名の別名であり、それ自体はデータ型ではありません.そのため、参照自体はストレージユニットを占めず、システムも参照にストレージユニットを割り当てません.したがって,参照に対してアドレスを求めることは,ターゲット変数に対してアドレスを求めることである.
6、配列の参照は作成できません.配列はいくつかの要素からなる集合であるため、配列の別名を作成することはできません.
二、*オペレータ
1、*はポインタとして使用されます.
2、*は、解参照オペレータとして使用されます.定義書には明確な定義はありませんが、操作数(ポインタタイプでなければなりません)が示す変数の参照を得ることを意味します.
最後に、私はネット上でいくつかのポインタと引用に対する解釈の説明を探して、すべて各位の達人の個人的な見解で、彼らの唯一の同じことは、これらの概念の定義の説明に対してすべての本が異なっています.それぞれの考え方で理解してほしい.私のこのオリジナル文に悪いところがあったら教えてください.ありがとうございます.
1、ポインタは本質的に変数であり、整数変数、文字変数などと本質的な違いはない.違いは、ポインタの値がメモリセルのアドレスを表し、変数、すなわちメモリセルのアドレスを参照する別名である.ポインタ変数を定義するのは、メモリアドレスに別名を付けただけです.
2、C/C++のポインタは実は1つの変数で、他のタイプの変数と同じように、4バイトを占有する変数(32ビットマシン上)で、他の変数との違いは、その変数値がメモリアドレスであり、メモリの別の場所を指していることです.reference私の理解は別名で、linuxオペレーティングシステムのaliasと同じです.さらに、pointer変数はNULLを指し、変数アドレスを指さないことを示すことができるが、referenceは宣言時に既存の変数とバインドされなければならず、このバインドは変更できない.
参考記事URL:http://zhidao.baidu.com/question/101184529.html
1、&はアドレス取りオペレータとして、オブジェクトまたは変数をメモリ内のアドレスと呼ぶことができます(アドレス取りオペレータは左の値にのみ使用できます):
int a = 10;
int *pint = &a; // a pint。
2、&は参照オペレータとしても使用できます.ネット上では間接参照とも呼ばれていますが、実際には別の変数またはオブジェクトの別名として使用されます.
int a = 10;
int &b = a; // , b a , b a , a 。
&のこのような間接参照としての使用は、C++の多くの関数に使用されるパラメータで、以下のようになっています.
void getSum( int a, int b, &sum){
sum = a + b;
}
int a = 10;
int b = 5;
int sum;
getSum( a , b , sum); // ? getSum , sum 。 C++
/*
? :
(1) 。 , , ( ) 。
(2) , , ; , , , ; , 。 , , 。
(3) , , , "* " , ; , , 。 , 。
, , 。
*/
注意:&参照オペレータとして注意しなければならない点は、次のとおりです.
1、&ここではアドレス演算ではなく、標識の役割を果たす.
2、タイプ識別子とは、ターゲット変数のタイプを指す.
3、参照を宣言するときは、同時に初期化する必要があります.
4、参照宣言が完了すると、ターゲット変数名に相当する2つの名前、すなわち、そのターゲットの元の名前と参照名があり、その参照名を他の変数名の別名として使用することはできません.
5、参照を宣言します.新しく定義された変数ではありません.参照名はターゲット変数名の別名であり、それ自体はデータ型ではありません.そのため、参照自体はストレージユニットを占めず、システムも参照にストレージユニットを割り当てません.したがって,参照に対してアドレスを求めることは,ターゲット変数に対してアドレスを求めることである.
6、配列の参照は作成できません.配列はいくつかの要素からなる集合であるため、配列の別名を作成することはできません.
二、*オペレータ
1、*はポインタとして使用されます.
int a = 10;
int *pint = &a; // pint, a pint。
2、*は、解参照オペレータとして使用されます.定義書には明確な定義はありませんが、操作数(ポインタタイプでなければなりません)が示す変数の参照を得ることを意味します.
int ival = 10;
int *ip = &ival; // :)
int &iref = *ip; //*ip ival 。 , , , * , 。
int &iref = ival;
最後に、私はネット上でいくつかのポインタと引用に対する解釈の説明を探して、すべて各位の達人の個人的な見解で、彼らの唯一の同じことは、これらの概念の定義の説明に対してすべての本が異なっています.それぞれの考え方で理解してほしい.私のこのオリジナル文に悪いところがあったら教えてください.ありがとうございます.
1、ポインタは本質的に変数であり、整数変数、文字変数などと本質的な違いはない.違いは、ポインタの値がメモリセルのアドレスを表し、変数、すなわちメモリセルのアドレスを参照する別名である.ポインタ変数を定義するのは、メモリアドレスに別名を付けただけです.
2、C/C++のポインタは実は1つの変数で、他のタイプの変数と同じように、4バイトを占有する変数(32ビットマシン上)で、他の変数との違いは、その変数値がメモリアドレスであり、メモリの別の場所を指していることです.reference私の理解は別名で、linuxオペレーティングシステムのaliasと同じです.さらに、pointer変数はNULLを指し、変数アドレスを指さないことを示すことができるが、referenceは宣言時に既存の変数とバインドされなければならず、このバインドは変更できない.
参考記事URL:http://zhidao.baidu.com/question/101184529.html