C++学习16:引用【黑马C++培训】
更新时间:2023年01月03日 14时21分11秒 来源:黑马程序员论坛
引用可以理解为给变量起一个别名,主要用于传参,通过定义引用变量,可以不使用副本,直接使用原始数据。
引用变量
定义引用变量:
int a;
int &b = a;//注意一定要初始化
这里的&不是取地址符,是引用的标符号,这里定义了a的一个引用b,a和b会指向相同的内存单元,有相同的值,而且使用方法都是相同的。也就是说,此时可以把b看做a,两者是一样的。
来看一个例子:
#include<iostream>
using namespace std;
int main()
{
int a = 1;
int c = 2;
int &b = a;
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
a++;
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
b++;
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
b=c;//这里是赋值,将c的值赋给b,而不是将b改为c的引用
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
system("pause");
}
运行结果如下:
a=1 地址:0015FAB8
b=1 地址:0015FAB8
a=2 地址:0015FAB8
b=2 地址:0015FAB8
a=3 地址:0015FAB8
b=3 地址:0015FAB8
a=2 地址:0015FAB8
b=2 地址:0015FAB8
请按任意键继续. . .
,可见,a和b的值和地址是完全相同的,修改a或b任意一个变量,另一个会随之改变。
引用传参
引用常被用于传参,通过定义引用变量,可以不使用副本,直接使用原始数据,这样可以代替传递指针。下面来看引用传参的例子:
#include<iostream>
using namespace std;
void swap(int &i,int &j);
int main()
{
int a = 1;
int b = 2;
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
swap(a,b);
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
system("pause");
}
void swap(int &i,int &j)
{
cout << "i=" << i << " 地址:" <<&i
<<endl << "j="<< j << " 地址:" << &j <<endl<<endl;
int temp = i;
i = j;
j = temp;
};
结果如下:
a=1 地址:003AFBC0
b=2 地址:003AFBB4
i=1 地址:003AFBC0
j=2 地址:003AFBB4
a=2 地址:003AFBC0
b=1 地址:003AFBB4
请按任意键继续. . .
可以看到,通过引用来传参,可以直接对原始数据进行修改,从而达到和传递指针一样的效果,而且操作起来更加直观方便。
注意此时swap()函数的传入参数必须是int型变量,如果传入int数或公式会报错,例如:
swap(a,3); //错误
swap(a,b+3); //错误
1
2
但如果将引用定义为const,就可以使用常数和公式了,例如:
#include<iostream>
#include<fstream>
using namespace std;
void swap(const int &i,const int &j);
int main()
{
int a = 1;
int b = 2;
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
swap(a,b+3);
cout << "a=" << a << " 地址:" <<&a
<<endl << "b="<< b << " 地址:" << &b <<endl<<endl;
system("pause");
}
void swap(const int &i,const int &j)
{
cout << "i=" << i << " 地址:" <<&i
<<endl << "j="<< j << " 地址:" << &j <<endl<<endl;
};
结果如下:
a=1 地址:002CF790
b=2 地址:002CF784
i=1 地址:002CF790
j=5 地址:002CF6B8
a=1 地址:002CF790
b=2 地址:002CF784
请按任意键继续. . .
可以看到使用const来修饰引用后,可以使用常数和公式作用参数,但实际是创建了临时变量,并没有修改引用变量的值。
推荐了解热门学科
传智播客是一家致力于培养高素质软件开发人才的科技公司,“黑马程序员”是传智播客旗下高端IT教育品牌。自“黑马程序员”成立以来,教学研发团队一直致力于打造精品课程资源,不断在产、学、研3个层面创新自己的执教理念与教学方针,并集中“黑马程序员”的优势力量,针对性地出版了计算机系列教材50多册,制作教学视频数+套,发表各类技术文章数百篇。
传智播客从未停止思考
传智播客副总裁毕向东在2019IT培训行业变革大会提到,“传智播客意识到企业的用人需求已经从初级程序员升级到中高级程序员,具备多领域、多行业项目经验的人才成为企业用人的首选。”
中级程序员和初级程序员的差别在哪里?
项目经验。毕向东表示,“中级程序员和初级程序员最大的差别在于中级程序员比初级程序员多了三四年的工作经验,从而多出了更多的项目经验。“为此,传智播客研究院引进曾在知名IT企业如阿里、IBM就职的高级技术专家,集中研发面向中高级程序员的课程,用以满足企业用人需求,尽快补全IT行业所需的人才缺口。
何为中高级程序员课程?
传智播客进行了定义。中高级程序员课程,是在当前主流的初级程序员课程的基础上,增加多领域多行业的含金量项目,从技术的广度和深度上进行拓展。“我们希望用5年的时间,打造上百个高含金量的项目,覆盖主流的32个行业。”传智播客课程研发总监于洋表示。
黑马程序员热门视频教程