C++学習ノート:引用
7994 ワード
C++学習ノート:引用 1.引用紹介 2.参照とポインタの比較 3.引用の本質的剖析 3.1参照はconst修飾 を加えることができる. 3.2参照およびsizeof演算子 3.3参照の本質はconstポインタ である.
1.引用紹介
実行結果:
参照は主に関数パラメータと戻り値で使用され、参照記号は定義時に同時に初期化されなければならず、後で別途値を割り当てることはできず、使用するしかありません.
2.参照とポインタの比較 1. 2.リファレンスは、機能が弱く、セキュリティが強化された低レイアウトポインタとして理解できます. 3.引用できることは針でもできるが、針でできることは引用できるとは限らない. 4.参照は変数の「別名」を指し、操作参照はそれに関連する変数を操作することに等しい.これは参照の使用効果の観点から言えば、ポインタに詳しい人にはかえって「別名」という言葉を理解しにくい. 5.参照がポインタより弱いところは、参照定義時に変数をバインドし、後で変更できないことです.引用が針より強いところも直すことができないので、「野針」の問題はなく、より安全です.
3.引用の本質剖析
3.1引用はconst修飾を加えることができる
ここで、
参照とconst修飾は主に関数パラメータで使用され、関数内部で実パラメータの値が変更されないことをユーザーに伝えます.
3.2参照とsizeof演算子
3.3参照の本質はconstポインタである
次のようになります.
参照は本質的にポインタであり、アドレスであるため、アドレス呼び出しの効果を実現することができ、参照はポインタが定義時にポインタ変数自体を
1.引用紹介
C
言語では、次の2つの交換変数値を実現する関数について、関数伝達は関数値であり、swap1()
は完了しないが、swap2()
は可能である.#include
void swap1(int a,int b)
{
int tmp=a;
a=b;
b=tmp;
}
void swap2(int* pa,int* pb)
{
int tmp=*pa;
*pa=*pb;
*pb=tmp;
}
int main(int argc,char**argv)
{
int a = 10,b = 20;
printf(" a=%d,b=%d
",a,b);
swap1(a,b);// a b
printf("swap1 ,a=%d,b=%d
",a,b);
swap2(&a,&b);// a b ,&
printf("swap2 ,a=%d,b=%d
",a,b);
return 0;
}
実行結果:
a=10,b=20
swap1 ,a=10,b=20
swap2 ,a=20,b=10
C++
で参照を使用できます.ここでの&
は参照を表し、&
はアドレス記号ではなく定義と識別の鍵を使用します.void swap3(int& a,int&b)
{
int tmp=a;
a=b;
b=tmp;
}
参照は主に関数パラメータと戻り値で使用され、参照記号は定義時に同時に初期化されなければならず、後で別途値を割り当てることはできず、使用するしかありません.
2.参照とポインタの比較
C
およびC++
はいずれもポインタを有し、使用方法および実装は本質的に全く同じであるが、参照はC++
でのみ使用可能である.3.引用の本質剖析
3.1引用はconst修飾を加えることができる
int a=10;
const int &b = a;
// b=55;
a =44; //
ここで、
b
がa
であるconst
の別名はa
によって値を変更することができるが、b
によってa
を変更することはできない.参照とconst修飾は主に関数パラメータで使用され、関数内部で実パラメータの値が変更されないことをユーザーに伝えます.
const
以外の変数がある場合がありますが、ある関数呼び出しの過程で、変数の値が関数内部で変更されることを望んでいません.この場合、const
参照で参照できます.3.2参照とsizeof演算子
sizeof
参照は、参照自体のサイズではなく、参照が指すターゲット変数のサイズを参照しますが、struct
またはclass
で参照を定義し、sizeof
全体でstruct
またはclass
が異なります.3.3参照の本質はconstポインタである
int &b = a;
次のようになります.
int * const b = &a;
C++
規格では、リファレンスがメモリ領域を占有するかどうかは規定されていませんが、ほとんどのコンパイラはリファレンスをconst
ポインタに実装しているので、ほとんどのコンパイラでリファレンスもメモリ領域を占有します.参照は天然const
なので、定義時に指向変数を初期化する必要があります.そうしないと意味がありません.参照は本質的にポインタであり、アドレスであるため、アドレス呼び出しの効果を実現することができ、参照はポインタが定義時にポインタ変数自体を
const
化したことである.