1.什么是引用?
--引用是变量的一个别名,通过这个别名和原来的名字都可以找到这份数据。一个人的名字和绰号,表示同一个人。
(1)引用和变量
格式:<类型> &name = data;
注意:引用必须在定义的时候同时初始化,后面不能再引用其他数据,类似于const;
例:
#include <iostream>
using namespace std;
int main()
{
int a = 99;
int &b = a;
cout<<a<<","<<b<<endl;
cout<<&a<<","<<&b<<endl;
return 0;
}引用在定义的时候加&,使用的时候不用,加&表示地址。不希望引用修改数据,就在前面加const;(常引用)格式:const <类型> &name = data;或<类型> const &name = data;
(2)引用作为函数参数用引用作为形参,调用时形参和实参就绑定在一起,指向同一份数据,如同C中的地址传递。修改形参,实参也改变,不会出现C中数值传递的时候实参不改变。例:#include <iostream>
using namespace std;
void swap1(int a, int b);
void swap2(int *p1, int *p2);
void swap3(int &a, int &b);
int main(){
int num1, num2;
cout<<"Input two integers: ";
cin>>num1>>num2;
swap1(num1, num2);
cout<<num1<<" "<<num2<<endl;
cout<<"Input two integers: ";
cin>>num1>>num2;
swap2(&num1, &num2);
cout<<num1<<" "<<num2<<endl;
cout<<"Input two integers: ";
cin>>num1>>num2;
swap3(num1, num2);
cout<<num1<<" "<<num2<<endl;
return 0;
}//直接传递参数内容
void swap1(int a, int b){
int temp = a;
a = b;
b = temp;
}
//传递指针
void swap2(int *p1, int *p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
//按引用传参 a,b分别绑定num1,num2了
void swap3(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
(3)引用作为函数返回值
#include <iostream>
using namespace std;
int &sum(int &num)
{
num = num +1;
return num;
}
int main()
{
int n = 20;
int m = sum(n);
cout<<m<<endl;
return 0;
}
注意:不能返回局部变量的引用;
例:
#include <iostream>
using namespace std;
int &plus10(int &n){
int m = n + 10;
return m; //返回局部数据的引用
}
int main(){
int num1 = 10;
int num2 = plus10(num1);
cout<<num2<<endl;
int &num3 = plus10(num1);
int &num4 = plus10(num3);
cout<<num3<<" "<<num4<<endl;
return 0;
}
2、引用的本质,和指针的区别引用只是对指针进行了封装,底层还是通过指针实现的。
3、引用必须在定义时初始化,从一而终,不能指向其他数据;指针没这个限制,不一定赋值,也能指向任意数据。
4、可以有const指针,但是没有const引用;
int a = 20;
int & const r = a;
const int *const ptr ;多此一举
5、指针可以有多级:int **p;但引用int &&p是错误的;
可以如下:
int a = 10;
int &r = a;
int &rr = r;
6、指针和引用的自增++,自减--表示不一样。指针表示指向的地址发生改变,指向下一个单元;引用表示指向的值改变;
int a=3
int*ptr=&a;
ptr++;
ptr--;
0x100000000;
int a = 3;
int &b= a;
b++;
b--;
#include <iostream>
using namespace std;
int main (){
int a = 10;
int &r = a;
r++;
cout<<r<<endl;
int arr[2] = { 27, 84 };
int *p = arr;
p++;
cout<<*p<<endl;
return 0;
}
本文深入讲解C++中的引用概念,包括引用的定义、初始化及应用,重点介绍引用作为函数参数和返回值的使用技巧,并对比引用与指针的区别。
904

被折叠的 条评论
为什么被折叠?



