引用
:变量数据类型
语法
:&引用名 = 已声明的变量名
用引用作为函数参数的实现引用传递
函数参数传递
:
值传递(单向值拷贝,只能将实参的值拷贝给形参, 实参与形参各自独占内存)
引用传递 :实现的是引用传递(形参与实参共用内存), 实参与形参是同一个对象
值传递用于读操作
引用传递用于写操作
引用类型:指针, 数组, 引用类型
交换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;
}