質量参加のC ++三種類の方法に
C ++パラメータは、主に3つの方法で関数に渡すこと:すなわち、値の転送、およびポインタ参照を転送します。
以下の3つの方法が違いと例を説明することによって説明します。
値の転送
形状パラメータの値は、関数内で変更された場合、我々はすべて知っているように、括弧内のパラメータの定義は、関数のパラメータは、ローカル変数への関数固有の機能をコピー引数を受け取っていることを意味している引数にそれは影響を受けません。
#include <iostream>
using namespace std;
void change(int formalNum) {
formalNum = 0;
cout << "formalNum address: " << &formalNum << endl;
}
int main() {
int realNum = 10;
cout << "Before Change: " << realNum << endl;
cout << "realNum address: " << &realNum << endl;
change(realNum);
cout << "After Change: " << realNum ;
return 0;
}
// 执行结果
Before Change: 10
realNum address: 008FFDA0
formalNum address: 008FFCCC
After Change: 10
それは、引数とパラメータ完全に異なるアドレス、および関数の引数の値を変更する方法を見ることができます。役割渡された値より多くの内部関数は外部パラメータの値を理解することです。値の転送は、パスパラメータ引数で、一方向です。
ポインタが渡されます
ポインタがうまく動作パラメータは、動作は直接アドレス引数に相当する場合、パラメータは、引数のアドレスへのポインタであることが理解される渡します。
#include <iostream>
using namespace std;
void change(int *ptr) {
*ptr = 0;
}
int main() {
int realNum = 10;
int* ptr = &realNum;
cout << "Before Change: " << realNum << endl;
change(ptr);
cout << "After Change: " << realNum ;
return 0;
}
// 执行结果
Before Change: 10
After Change: 0
我々は明らかに我々は関数内で引数の値を変更することに成功していることがわかります。C ++は、パラメータを渡すために非常に一般的な方法です。
参照渡し
参照渡し、実際にパラメータを渡す方法を理解することが最も困難です。それの詳細な分析の前に、のは、彼の機能を言わせて。
関数にパラメータを渡し、参照によって呼び出し方法、仮パラメータへのアドレス参照をコピーします。関数の内部では、コールへのアクセスに使用する実際のパラメータを参照します。この手段は、そのパラメータの変更は、実際のパラメータに影響を与えます。
だから、必ず誰かが、尋ねとして直接どのような違いので、それが作るん、ポインタ、および参照に影響を与えていますか???その違いは大きい行くことがあります。
- 本質的にポインタ変数であり、変数は整数であり、他の変数のアドレスです。ポインタは、論理的に独立しており、それもその値(他のアドレスをポイント)を変更、変更することができ、対応するデータメモリを除去することができます。
- 参照はニックネームとして理解することができる、他の変数と同義であり、それは論理的に持つ依存 C ++も作成時の基準は(既存の変数、およびその変数への参照を作成する)に初期化されなければならない提供するので、 。そして、それは参照がそのライフサイクルを通じて変更することはできませんオブジェクト最初から最後まで、であるが、唯一の同じ変数(エイリアスされているエイリアスは、変更することはできません代表の初期化)に取り付けることができます。
- 転写プロセスを参照すると、ローカル変数の形の伝達関数であるがパラメータは、スタック内のメモリ空間を開放するが、この時点で引数変数に呼出関数によって配置アドレスです。変調関数の任意の動作パラメータは、すなわち、間接アドレスとして扱われているが、スタックに格納された変数のアドレスで呼び出す関数で引数にアクセスします。このため、すべての操作は、呼び出し元の関数に影響されるパラメータ調整関数の引数変数に行われています。
引用のルール:
- 作成された状態での参照は、(ポインタが任意の時に初期化することができます)初期化する必要があります。
- NULL参照を持つことができない、参照が(NULLを指すことができます野生のポインタを持っているかもしれポインタ)有効なメモリセルに関連付ける必要があります。
- 参照が初期化されると、(ポインタがオブジェクトの意味の範囲内でいつでも変更することができる)参照関係を変更しません。
読む、非常に多くのポインタを渡すと、参照渡し、それが何であるかを使用?
- 内部関数は、パラメータを変更するには、あなたは変更が呼び出し元の関数に影響を与えたいです。比較のポインタ/参照パラメータで(実際の引数のメモリに直接変化)「パス」引数を変更してもよいです。
- 実際の必要性の関数が値を複数の値を返すが、唯一の明示的なリターンする場合、追加の変数は、ポインタ/参照を返すように要求され得ます。
次の特定のアクションを参照してください。
この方法は、参照変数等の従来の変数が、間のデータ・タイプと名前定義され&
たシンボルを。パラメータは、そのように、例えば、以下の関数が定義されているrefNum
参照変数となります。
#include <iostream>
using namespace std;
void change(int& refNum) {
refNum = 0;
cout << "reference address: " << &refNum << endl;
}
int main() {
int realNum = 10;
cout << "Before Change: " << realNum << endl;
cout << "realNum address: " << &realNum << endl;
change(realNum);
cout << "After Change: " << realNum ;
return 0;
}
// 执行结果
Before Change: 10
realNum address: 00A4F9F4
reference address: 00A4F9F4
After Change: 0
、見ることができます参照渡しながら、我々はパラメータの値を変更することに成功したパラメータのアドレスとアドレスの引数は、実際に同じです。