C ++:値渡しと参照渡し

値渡しと参照渡し

引用:変数データ型
语法&引用名 = 已声明的变量名
参照渡しする関数パラメーターの実現として参照を使用します
函数参数传递
値渡し(一方向の値のコピー。実際のパラメーターの値のみを仮パラメーターにコピーでき、実際に参加している仮パラメーターには独自の排他メモリーがあります
参照渡し:実装はリファレンス転送であり(フォームは実際のパラメータ共有メモリに参加します)、実際の参加パラメータは同じオブジェクトです

値の転送は読み取り操作に使用されます
参照転送は書き込み操作に使用されます
参照タイプ:ポインター、配列、参照タイプ


ポインタバージョン

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;
}

おすすめ

転載: blog.csdn.net/m0_51354361/article/details/114780012