引用(C++)

2023-12-20 21:49:48

1.6 引用

C++出现了新的概念:引用。引用是某个变量的别名。

语法格式如下:

? 类型 &引用名 = 变量名;

#include <iostream>
using namespace std;

int main (void) {

	int num = 8;
	int &nr = num;

	cout << "num = " << num << endl;//num = 8
	cout << "nr = " << nr << endl;//nr = 8

	cout << "num的地址: " << &num << endl; //num的地址: 0xbfcdf738
	cout << "nr的地址: " << &nr << endl;//nr的地址: 0xbfcdf738
	return 0;
}

例子当中可以看出来 num 和 nr 其实是同一块内存。

用途:

? 1)简化编程,用指针的场景可以用引用替换(尽量减少指针的使用)

#include <iostream>
using namespace std;

void swap(int *p1, int *p2) { //交换函数
	int temp = *p1;
	*p1 = *p2;
	*p2 = temp;
}

struct stu { //结构体
	char name[20];
	int age;
	int score;
};

namespace func1{ //名字空间 
	void func(struct stu s1) {
		cout << "fun1 : " << &s1 << endl;
	}
}

namespace func2 { //名字空间
	void func(struct stu &s1) {
		cout << "fun2 : " << &s1 << endl;
	}
}

int main (void) {

	int x = 100;
	int y = 200;

	swap(&x, &y);

	cout << "x : " << x << "\t" << "y : " << y << endl;

	stu s1;
	cout << "struct stu : " << &s1 << endl;
	func1::func(s1);//这样调用会导致创建两个结构体的内存
	func2::func(s1);//调用这个用到引用的函数,系统开销会小一些,不会有新的结构体形参变量出现。

	return 0;
}

在使用引用时需要注意一下几个问题:

  • &的位置是灵活的,一下几种定义完全相同

    int& nr = num;
    int &nr = num;
    int & nr = num;
    
  • 在变量声明时出现&才是引用运算符(包括函数参数声明和函数返回类型的声明)

    int &nr = num;
    int &f(int &nr, int &n);
    
  • 引用必须定义时初始化

    float f;
    float &r1 = f;
    float &r2;
    r2 = f; //错误
    
  • const引用(常引用)。在定义引用时一般为左值(变量)。

    左值,是指变量对应的那块内存区域,是可以放在赋值号左边的值;

    右值,是指变量对应的内存区域中存储的数据值,是可以 放在赋值号右边的值;

    常量、表达式都是右值,例如:

    int i = 1;
    i = i+10;
    i+10 = i; //错误
    i = 10;
    10 = i; //错误
    

    可以使用const进行限制,使他成为不允许修改的常量引用。

    int x = 10;
    //	int &ri = 100;  //error
    const int &r1 = 100; //ok 常引用 万能引用
    const int &r2 = x; //ok
    //	r1++;	//error
    int a = 100;
    char &c = a; //错误,将c转换char类型,转换结果保存到临时变量中 实际引用临时变量,而临时变量是右值
    
  • 引用的本质

    引用的本质就是指针常量。

    #include <iostream>
    using namespace std;
    
    void swap(int &x, int &y) { //交换函数
    	int temp = x;	//temp = *y;
    	x = y;		//*x = *y;
    	y = temp;	//*y = temp;
    }
    
    int main (void) {
        int x = 10, y = 20;
        swap(x, y);
        return 0;
    }
    

文章来源:https://blog.csdn.net/qq_36091214/article/details/135117388
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。