C++:值传递和引用传递

值传递和引用传递

引用:变量数据类型
语法:&引用名 = 已声明的变量名
用引用作为函数参数的实现引用传递
函数参数传递:
值传递(单向值拷贝,只能将实参的值拷贝给形参, 实参与形参各自独占内存)
引用传递 :实现的是引用传递(形参与实参共用内存), 实参与形参是同一个对象

值传递用于读操作
引用传递用于写操作
引用类型:指针, 数组, 引用类型


指针版本

交换2个变量的值
@param pa, int*, 指针
@param pb, int*, 指针

void swap(int* pa,int* pb){
	int t;
	t = *pa; 
	*pa = *pb; 
	*pb = t;
}

数组版本

交换2个变量的值
@param arr, int[], 数组

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**, 指针的指针(二级指针)

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

你可能感兴趣的:(C++,指针,引用传递)