- 1. 引用的基本使用
- 2. 引用的注意事项
- 3. 引用做函数参数
- 4.引用做函数的返回值
- 5. 引用的本质
- 6.常量引用
- 作用:给变量起别名( *** 作的是同一块内存空间)
- 语法:数据类型 &别名 = 原名
- 引用必须初始化
int &b; //错误的
- 引用在初始化后,不可以改变
int a = 10;
int b = 10;
int &c = a;
int &c = b; //错误的,初始化之后便不可更改
3. 引用做函数参数
- 作用:函数传递参数时,可以利用引用的技术让形式参数修饰实参
- 优点:可以简化指针修改实参
void myswap02(int &a, int &b)
{
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 10;
int b = 20;
myswap02(a, b);
cout << "a = " << a << endl;
cout << "b = " << b << endl;
system("pause");
return 0;
}
4.引用做函数的返回值
- 不要返回局部变量的引用
int& test01()
{
int a = 10;
return a;
}
int main()
{
int &ref = test01();
cout << ref << endl; //第一次结果正确是因为编译器做了保留
cout << ref << endl; //第二次结果错误是因为a的内存已经被释放了
system("pause");
return 0;
}
- 函数的调用可以作为左值
int& test01()
{
static int a = 10;
return a;
}
int main()
{
int &ref = test01();
cout << ref << endl;
cout << ref << endl;
test01() = 20; //如果函数的返回值是引用,这个函数调用可以作为左值
cout << ref << endl;
cout << ref << endl;
system("pause");
return 0;
}
5. 引用的本质
本质:引用的本质在C++内部实现是一个指针常量
指针常量:指针的指向不能修改,指针指向的值可以修改,这也解释了为什么引用在初始化后不能改变的问题
// 发现是引用,转换为int* const ref = &a;
void func(int& ref)
{
ref = 100; // ref是引用,转换为*ref = 100
}
int main()
{
int a = 10;
int &ref = a; //自动转换为int* const ref = &a;
ref = 20; //内部发现ref是引用,自动转换为*ref = 20;
cout << "a:" << a << endl;
cout << "ref:" << ref << endl;
system("pause");
return 0;
}
6.常量引用运行结果:
a:20
ref:20
作用:常量引用主要用来修饰形参,防止误 *** 作,在参数形参列表中可以加const修饰形参,防止形参改变实参
实例1:
int main()
{
//int &ref = 10;错误的写法,引用必须引一块合法的内存空间
//加上const之后,编译器将代码修改为:
// int temp = 10; const int &ref = temp;
const int &ref = 10;//此时ref = 10;会报错,因为ref变为只读
system("pause");
return 0;
}
实例2:
//打印数据函数
void showValue(int &val)
{
val = 100;//这里的修改将改变a的值
cout << "val = " << val << endl;
}
int main()
{
int a = 10;
showValue(a);
system("pause");
return 0;
}
运行结果:
val = 100
//打印数据函数
void showValue(const int &val)//为了不修改实际参数,需要加const
{
val = 100;//此时这行代码将会报错(错误:表达式必须为可修改的左值)
cout << "val = " << val << endl;
}
int main()
{
int a = 10;
showValue(a);
system("pause");
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)