【C++学习————引用】

【C++学习——————引用】


【C++学习————引用】_第1张图片

欢迎阅读新一期的c++模块————引用

✒️个人主页:-Joker-

专栏:C++

代码仓库:c_code

欢迎大佬们的阅读和三连关注,顺着评论回访


文章目录

    • 【C++学习——————引用】
  • 引用介绍
  • 引用的特点
  • 引用的用法
    • 1.常引用
    • 2.常引用用法
    • 3.引用做参数
    • 引用做返回值
  • 引用和指针的区别
          • 1.语法层面的区别
          • 2.程序为指针变量分配内存区域,而不为引用分配内存区域。
          • 3.指针在解引用的时候需要使用 ‘ * ’,但是引用不需要解引用
          • 4.引用在定义之后不可修改(地址不可变),但是指针可以修改地址
          • 5.引用的++与指针的++的效果不一样


引用介绍

什么是引用

概念:引用是为已存在的变量取了一个别名,引用和引用的变量共用同一块内存空间

引用的格式:类型& 引用变量名(对象名) = 引用实体; int& ra = a; ra为a的引用


引用的特点

  • 引用实体和引用类型必须为同种类型
  • 引用在定义时必须初始化
  • 一个实体可以有多个引用,但一个引用只能引用一个实体
  • 没有空引用

引用的用法

1.常引用

常引用:const int &a=b
就相当于 const int * const a=b。不仅仅是a这个地址不可修改,而且其指向的内存空间也不可修改。
const修饰的类型必须使用常引用

例如

void Test1()
{
    const int a = 1;
    int& b = a; // 该语句编译时会出错,a为常量
    const int& c = a;
    
    double d = 1.00;
    int& rd = d; // 该语句编译时会出错,类型不同
}

2.常引用用法

1.引用普通变量

void Test2()
{
	int a = 10;
	int & b = a;
    const int& c = a;
    b += 10;
    a += 10;
    c += 10;//c不可修改所以会报错
}

2.引用常量

void Test3()
{
    int n = 1;
    const int m =2;
    int& x = n;
    
    const int& y = m; 
    const int& z =1; 
    return 0;
}

3.引用做参数

void Swap(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

引用做返回值

int& Test4(int& a)
{
	a+=20;
	return a;
}

引用和指针的区别

1.语法层面的区别

从语法规则上讲,指针变量是某个变量或对象的地址,而引用是某个实例的别名。

2.程序为指针变量分配内存区域,而不为引用分配内存区域。
	int a = 10;
	int* p = &a;//指针p取a的地址,需要分配内存
	int& b = a;//b是a的别名,并不需要分配空间
3.指针在解引用的时候需要使用 ‘ * ’,但是引用不需要解引用
	int a = 10;
	int* p = &a;
	int& b = a;
	
	*p = 20;//指针想要对a的值修改需要解引用
	b = 20;//b只是a的别名所以可以直接修改
4.引用在定义之后不可修改(地址不可变),但是指针可以修改地址
	int a = 10;
	int* p = &a;
	int& x = a;
	
	int b = 20;
	p = &b;//p的地址由a变成了b的地址
	x = b;//==> a = 20
5.引用的++与指针的++的效果不一样
	int a = 10;
	int* p = &a;
	int& b = a;
	printf("p = %p, b = %d\n", p, b);

	p++;
	b++;
	printf("p = %p, b = %d", p, b);

【C++学习————引用】_第2张图片
由此我们可以看出指针++是让地址改变,而引用++则是对a的值进行改变

综上所述 :引用本身是一个变量,但是这个变量又仅仅是另外一个变量一个别名,它不占用内存空间,它不是指针哦!仅仅是一个别名!


以上就是对C++引用的介绍,各位老爷别忘了给个支持三连

你可能感兴趣的:(C++,c++,学习)