C++中的引用和高级函数(上)

简介: C++中的引用和高级函数(上)

引用

引用定义

作用:给变量起别名
语法:数据类型 &别名 = 原名

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。
一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

eg:

int i=20;
int &j=i;

引用注意事项

1.引用必须要初始化

int &a;//这是错误的使用方法

2.引用一旦初始化就不可以更改了;
3.、一个变量可取多个别名。

引用做函数参数

作用:函数传参时,可以利用引用的技术让形参修饰实参
优点:可以简化指针修改实参。
我们以交换两个数的函数作为例子:

按c语言的方法我们需要进行传址操作

void Swap1(int*a,int*b)
{
    
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    
    int a, b;
    cin >> a ;
    cin >> b ;
    Swap1(&a, &b);
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
    system("pause");
    return 0;
}

但我们学了引用后我们就可以引用传递

void Swap2(int& a, int& b)
{
    
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    
    int a, b;
    cin >> a ;
    cin >> b ;
    Swap2(a, b);
    cout << "a=" << a << endl;
    cout << "b=" << b << endl;
    system("pause");
    return 0;
}

引用做函数的返回值

1.不要返回局部变量的引用

//切记此方法为错误用法
int& test()
{
    
    int a = 10;
    return a;
}

2.函数的调用可以作为左值

int& test()
{
    
    static int a = 10; //用static修饰延长函数的生命周期
    return a;
}
int main()
{
    
    int& a = test();
    cout << "a=" << a << endl;
    test() = 1000;//函数的调用可以作为左值
    cout << "a=" << a << endl;
    system("pause");
    return 0;
}

引用的本质

本质:引用本质在c++内部实现是一个指针常量(指针的指向是不可以改的,指向的值是可以改的)

#include<iostream>
using namespace std;
int main()
{
    
    int a = 10;
    int& ref = a;//其内部相当于int*const ref = &a; 这也是引用不可更改的原因
    ref = 20;   //其内部相当于 *ref = 20;
    system("pause");
    return 0;
}

常量引用

作用:常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参;
#include<iostream>
using namespace std;
int main()
{
    
    int a = 10;
    const int& ref = a;
    a = 50;
    system("pause");
    return 0;
}

此时

a=100;

这样是可以的

ref=10;

是不合法的,是错误的,这样就可以防止误操作。

C++ 引用 vs 指针

引用很容易与指针混淆,它们之间有三个主要的不同:

1.不存在空引用。引用必须连接到一块合法的内存。
2.一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3.引用必须在创建时被初始化。指针可以在任何时间被初始化。
相关文章
|
23天前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
15 1
|
1月前
|
C++
c++常见函数及技巧
C++编程中的一些常见函数和技巧,包括生成随机数的方法、制表技巧、获取数字的个位、十位、百位数的方法、字符串命名技巧、避免代码修改错误的技巧、暂停和等待用户信号的技巧、清屏命令、以及避免编译错误和逻辑错误的建议。
18 6
|
1月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
27 0
c++学习笔记05 函数
|
30天前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
30 0
|
1月前
|
Dart 编译器 API
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
Dart ffi 使用问题之在C++线程中无法直接调用Dart函数的问题如何解决
|
1月前
|
存储 算法 搜索推荐
【C++】类的默认成员函数
【C++】类的默认成员函数
|
1月前
|
JavaScript C++
【C++ visual studio】解决VS报错:error C2447: “{”: 缺少函数标题(是否是老式的形式表?)【亲测有效,无效捶我】
【C++ visual studio】解决VS报错:error C2447: “{”: 缺少函数标题(是否是老式的形式表?)【亲测有效,无效捶我】
|
2天前
|
编译器 C++
C++ 类构造函数初始化列表
构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
43 30
|
17天前
|
存储 编译器 C++
C ++初阶:类和对象(中)
C ++初阶:类和对象(中)
|
1月前
|
存储 安全 编译器
【C++】类和对象(下)
【C++】类和对象(下)
【C++】类和对象(下)