C++の中の関数のパラメータを深く理解します——値を伝達してアドレスの詳しい解を伝達します

2535 ワード

最近、「C++現代大学チュートリアル」という本を読んだとき、関数のパラメータの伝達値と伝達先の使用について、深く理解しました.特に,以前ポインタを関数パラメータとして渡していた場合,誤はアドレス方式と考えられていたが,実際には一周し,ポインタを関数パラメータとして渡した場合も,値伝達方式であり,ただ伝達された値は「アドレス」である.実際のアドレス方式は,C++で参照をパラメータとして渡す方式である.次に、パラメータ伝達で使用する変数、ポインタ(配列)、参照について詳しく説明します.
1「変数」の使用
「変数」を関数パラメータとして渡します.関数を呼び出すと、本質的にはメモリが別の空間を開き、伝達者の実パラメータを形パラメータにコピーします.すなわち、関数で処理されるのは実際に実パラメータのコピー(形パラメータ)なので、関数がどのように処理されても実パラメータの値は変わりません.
2例の説明.次に、a,bの値を交換する機能を有するvoid swap(int a,int b)関数により説明する.具体的なコードは以下の通りです.
#include <iostream>
using namespace std;


//1      
void swap(int a,int b){

	int temp;
	temp = a;
	a = b;
	b = temp;

	printf("a: %d,b: %d
", a, b); } int main(){ int a = 3, b = 4; swap(a, b); printf("a: %d,b: %d", a, b); system("pause"); return 0; }
実験結果は以下の通りであった.結果は,実パラメータが関数処理された後,値は変化せず,そのコピー,すなわち形パラメータの値が変化することを示した.
2「ポインタ」の使用
2.1パラメータとしてポインタを使用する場合は、実際にはパラメータとして変数を使用する場合と同じです.ただし、ここの変数はポインタ変数であり、伝達された値はアドレス値である.だから本質的には価値を伝える方法です.実パラメトリック変数のアドレスを韓国式の形パラメトリックポインタに渡すと、実際には実パラメトリックのアドレス値を形パラメトリックポインタ変数に割り当て、その後の処理は、このアドレス値に基づいてインデックスを行い実パラメトリックの実際の値を見つけて処理するので、関数処理の実際の実パラメトリックの値は、形パラメトリックポインタ変数によって指向されるにすぎない.
2.2例の説明.次にvoid swap(int*a,int*b)関数で説明します.この関数の機能は、a,bの値を交換することです.具体的なコードは以下の通りです.
#include <iostream>
using namespace std;


//2      
void swap(int *a, int *b){

	int temp;
	temp = *a;
	*a = *b;
	*b = temp;

	printf("a: %d,b: %d
", *a, *b); } int main(){ int a = 3, b = 4; swap(&a, &b); printf("a: %d,b: %d", a, b); system("pause"); return 0; }
実験結果は以下の通りであった.その結果,実パラメータは関数処理後,値に応じて変化し,実パラメータのアドレス値をパラメータポインタに付与したため,関数処理時にこのポインタで実パラメータの対応する値を見つけて処理したが,実際には実パラメータ値自体を処理しているため,予想される結果が得られることが分かった.
3「参照」の使用
3.1「参照」を関数パラメータとして渡し、実際の参照は実際の変数に与えられます(実参)別名として1つのメモリセルを共有しているため、実際の関数処理は同じメモリセルを処理するので、それに応じて実参が変化する.例えば、1人は、本当の名前のほかに、小さな名前があるように、名前を呼ぶと承諾し、小さな名前を呼ぶときも承諾する.同じ人だから.前述したように、「引用」こそが本格的なアドレス方式であり、ポインタでアドレスを行うように、大回りして実際には値を伝える方式ではない.
3.2例説明.次にvoid swap(int&a,int&b)関数で説明します.この関数の機能は、a,bの値を交換することです.具体的なコードは以下の通りです.
#include <iostream>
using namespace std;


//3      
void swap(int &a, int &b){

	int temp;
	temp = a;
	a = b;
	b = temp;
	printf("a: %d,b: %d
", a, b); } int main(){ int a = 3, b = 4; swap(a, b); printf("a: %d,b: %d", a, b); system("pause"); return 0; }
実験結果は以下の通りであった.その結果,実パラメータは関数処理後,変数名と実パラメータがメモリ空間を共有するため,実際の実パラメータ内容が変化することを示した.