c++引用

C++中的引用是一种别名机制,它在定义时必须初始化且不可改变引用对象。引用不占用额外内存,实际上是变量的另一个名字。引用作为函数参数可以实现原地修改,如swap函数示例所示。返回引用需要注意避免返回局部变量引用,可能导致悬挂引用。引用与指针的区别在于引用必须绑定且不能改变,而指针可以重新赋值。
摘要由CSDN通过智能技术生成
引用:

​ c++中提供了引用的概念,引用可以看作数据的一个别名,通过别名和原来的名字都能够找到这份数据。

​ 代码如下:

#include <iostream>

int main(){
    int num = 1;
    int& ref = num;
    ref = 5;
    printf("%d   %p",num,&num);
    printf("%d   %p",ref,&ref);
    return 0;
}
//执行结果如下:
5   0x7fffd6d64cfc
5   0x7fffd6d64cfc

由上述结果可以看出,引用变量ref和num指代的是同一份数据,并且修改了ref,num的值也发生了改变。并且通过打印其地址,我们可以发现引用和其实体num的地址是相同的。

注意:引用本身也会分配内存空间,只不过当我们在打印引用的地址时及其变量时,编译器会进行转换,引用底层还是指针。

2.引用必须在定义时进行初始化,并且一旦绑定,就不能引用其他实体,从一而终。这点类似于const变量
int main(){
	int num = 10;
    int sum = 20;
    //int& ref;		//定义时必须初始化
	int& ref = num;
    //&ref = sum;    xxxxxxx错误
    
}
3.c++引用作为函数参数

​ 在定义或申明函数时,我们可以将函数的形参指定为引用的形式,这样在调用时就会将形参和实参绑定到一起,让他指代同一份数据,若在函数内部修改了形参的数据,那么实参的数据也会被修改。

#include <iostream>
using namespace std;

void swap1(int a, int b);
void swap2(int *p1, int *p2);
void swap3(int &r1, int &r2);


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;
}

//按引用传参
void swap3(int &r1, int &r2) {
    int temp = r1;
    r1 = r2;
    r2 = temp;
}

//运行结果:
Input two integers: 12 3412 34
Input two integers: 88 9999 88
Input two integers: 100 200200 100
c++引用作为函数返回值:
#include <iostream>
using namespace std;

int &plus10(int &r) {
    r += 10;
    return r;
}

int main() {
    int num1 = 10;
    int num2 = plus10(num1);
    cout << num1 << " " << num2 << endl;

    return 0;
}

注意:不要返回局部变量的引用,函数调用结束局部数据就会被销毁,若在函数使用该引用,其结果会显得相当怪异!

指针和引用的区别:

1.引用在定义时必须初始化,并且要从一而终,不能再指向其他数据,而指针没有这个限制,指针再定义时可以不初始化,以后也能指向其他数据。

2.指针可以有多级,但是引用只能有一级,int&&p是不合法的。

3.指针和引用的自增、自减运算意义不一样,若基类型为基本数据内省,对为指针++,–表示指向下一份数据,对引用使用++,表示所指代的数据++。

#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值