値渡しと参照渡し
引用
:変数データ型
语法
:&引用名 = 已声明的变量名
参照渡しする関数パラメーターの実現として参照を使用します
函数参数传递
:
値渡し(一方向の値のコピー。実際のパラメーターの値のみを仮パラメーターにコピーでき、実際に参加している仮パラメーターには独自の排他メモリーがあります)
参照渡し:実装はリファレンス転送であり(フォームは実際のパラメータ共有メモリに参加します)、実際の参加パラメータは同じオブジェクトです
値の転送は読み取り操作に使用されます
参照転送は書き込み操作に使用されます
参照タイプ:ポインター、配列、参照タイプ
ポインタバージョン
2つの変数
@ parampa、int *、pointer
@param pb、int *、pointerの値を交換します
void swap(int* pa,int* pb){
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
アレイバージョン
2つの変数の値を交換します
@ paramarr、int []、array
void swap(int arr[]){
int t;
t = arr[0];
arr[0] = arr[1];
arr[1] = t;
}
参照バージョン
2つの変数の値を交換します
パラメーターバインディング:&ra = num1、&rb = num2;
参照は本質的に、変数
@param ra、int&、参照型
@param rb、int&、参照型の別の正式な名前です
void swap(int &ra, int &rb){
int t;
t = ra;
ra = rb;
rb = t;
}
メモリを割り当てる
ポインターバージョン:書き込み操作、参照渡し、
実際のパラメーターはこのタイプの変数のアドレスを使用します
パラメーターバインディング:p =&pnum;
@param p、タイプはint **、ポインターのポインター(第2レベルのポインター) )
void allocMemory(int* *p){
//p= (int*)malloc(sizeof(int)*10);
*p = new int[10];//为pnum指针指定的空间分配内存
//赋值操作:(*p)[0] = 1;
}
参照バージョン:書き込み操作、参照渡し、
実際のパラメーターはこのタイプの変数名を使用します
パラメーターバインディング:&p = pnum
@param p:int *&、ポインター参照
void allocMemory(int* &p){
p = new int[10];
//赋值操作:p[0] = 1;
}
メイン機能
int main(){
int* pnum;
//调用指针版本,实参用该类型变量的地址
allocMemory(&pnum);
//调用引用版本,实参用该类型的变量名
allocMemory(pnum);
pnum[0] = 2021;//检验内存是否分配成功
cout << pnum[0] << endl;
int num1, num2;
//int num[2];
cin >> num1 >> num2;
//cin >> num[0] >> num[1];
//调用指针版本,实参用该类型变量的地址
swap(&num1, &num2);
//调用引用版本,实参用该类型的变量名
swap(num1, num2);
//swap(num);//实参数组名
cout << num1 << endl;
cout << num2 << endl;
//cout << num[0] << endl;
//cout << num[1] << endl;
return 0;
}