首页 > 编程语言 >C++基础3: 引用

C++基础3: 引用

时间:2023-04-25 19:45:35浏览次数:36  
标签:变量 int 基础 C++ pa 引用 include 指针

前言

本篇首先回顾指针的概念, 用C指针的缺陷引出C++中的引用, 然后对引用进行说明

比如, 什么是引用? 引用解决指针什么问题? 引用的特性和使用等等

1. 指针

什么是指针

指针是内存单元的地址, 口语中的指针实际上是指针变量, 存储地址的变量

#include <stdio.h>
int main()
{
	int a = 0;
	// 指针变量 pa
	int* pa = &a;
}

这里的pa就是一个指针变量, 存储变量a的地址

pa前面的*表示pa是一个指针变量, *前面int表示存储的是一个整形变量的地址, 所以pa是一个整形指针

现在知道了什么是指针, 指针是有分类的, 下面具体说一下指针的分类

指针的分类

#include <stdio.h>
int add(int x, int y)
{
	return x + y;
}
int sub(int x, int y)
{
	return x - y;
}
int mul(int x, int y)
{
	return x * y;
}
int main()
{
	int a = 0;
	// 整形指针 pa
	int* pa = &a;

	// 字符指针 ps
	char* ps = "abc";

	// 二级指针ppa
	int** ppa = &ppa;
	
	int b = 0;
	int c = 1;
	int d = 2;
	int* parr[3] = { &b, &c, &d };  //指针数组 parr

	int arr[5] = { 0,1,2,3,4 };
	int(*pc)[5] = &arr;		//数组指针 pc

	// 函数指针 ptr1
	int(*ptr1)(int, int) = add;

	// 函数指针数组 ptr2
	int(*ptr2[3])(int, int) = { add,sub,mul };
	
}

指针的缺陷

如上述列举的指针类型, 二级指针, 数组指针, 指针数组... 所以指针的缺陷很明显, 就是太复杂了

C++为了简化指针引入引用来降低指针的复杂性

2. 引用的概念

什么是引用

引用就是给一个已经存在的变量取别名, 如下例子

b 是变量a的一个别名, 打印b的值就是打印a的值,因为它们实际上指向的是同一块的内存空间

注意, 在学习引用的初阶, 建议这样理解引用:

引用不是新定义一个变量,而是给已存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间

引用的定义与特性

定义引用的语法:

类型& 引用变量名(对象名) = 引用实体

#include <iostream>
using namespace std;

int main()
{
	int a = 1;
	int& b = a; // 引用 b
}

引用的特性:

1. 引用在定义时必须初始化

2. 一个变量可以有多个引用

#include <iostream>
using namespace std;

int main()
{
	int a = 1;
	int& b = a;
	int& c = a;
}

3. 引用一旦引用一个实体,不能再引用其他实体

b = x, 是将x指向的值赋值给b指向的值, 而不是引用b更改引用的对象

3. 引用的使用

引用作为函数形参

#include <iostream>
using namespace std;
void swap(int& x, int& y)
{
	int tmp = x;
	x = y;
	y = tmp;
}
int main()
{
	int a = 1;
	int b = 2;
	printf("%d %d\n", a, b);
	swap(a, b);
	printf("%d %d\n", a, b);
}

引用作为函数返回值

#include <iostream>
using namespace std;
int& count()
{
	static int n = 0;
	n++;
	return n;
}
int main()
{
	int ret = count();
	cout << ret << endl;
}

  

标签:变量,int,基础,C++,pa,引用,include,指针
From: https://www.cnblogs.com/xumu11291/p/17351705.html

相关文章

  • C++中什么是多态,多态需要满足什么条件,怎么使用,它的实现原理是什么?
    概念:多态是指一个接口,根据传入的参数不同,呈现多种多态,多态分为静态多态和动态多态。静态多态:像函数重载和运算符重载属于静态多态,复用函数名。它的函数地址在编译阶段就已经确定了。动态多态:通过派生类和虚函数实现运行时多态(有子类继承,子类重写父类虚函数),它的函数......
  • go语言变量类型、常量、函数基础、函数高级
    目录1go语言变量类型2常量3函数基础4函数高级1go语言变量类型#数字#int整数有正负int8int16int32int64 java byteshortintlong -int8一个字节表示(8个比特位)范围:-2的7次方到+2的7次方-1-int162个字节表范围:-2的15次方......
  • C++深拷贝与浅拷贝
    浅拷贝的问题默认提供的拷贝构造就是浅拷贝,如果拷贝的对象中含有成员指针变量指向堆区中的内存空间,那么就会出现两个对象中的成员指针变量指向同一块堆区空间,当方法执行结束后,对象就会被释放,调用析构函数(析构函数中存在释放在堆区开辟的内存空间),就会存在一块内存空间被多次释放......
  • 深度学习--RNN基础
    深度学习--RNN基础​ RNN(RecurrentNeutralNetwork,循环神经网络),主要应用于自然语言处理NLP。RNN表示方法1.编码因为Pytorch中没有String类型数据,需要引入序列表示法(sequencerepresentation)对文本进行表示。​ 表示方法:[seq_len:一句话的单词数,feature_len:每个单词的表示......
  • 蓝牙基础
    蓝牙目前已更新的版本(assignednumbers文档中): 各个版本之间的差异:在core_v5.3中的卷1中: ......
  • c++遍历搜索关键字
    #include<iostream>#include<windows.h>#include<string.h>#include<strsafe.h>#defineMAX_INPUT_LENGTH255usingnamespacestd;voidprintMemory(char*location,longsize){ printf("\n\n---------------------location......
  • 我总结的一些 C++ 高频面试题(收藏)
    extern“C”extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。被extern"C"修饰的变量和函数是按照C语言方式编译和连接的。extern“C”这个声明的真实目的:解决名字匹配问题,实现C++与C的混合......
  • c++11 std::forward使用场景以及作用
    不使用 std::forward时,下述代码G不管传入什么类型的参数,只会最终调用 voidF(int&a);usingnamespacestd; voidF(int&a){  cout<<"int&version"<<a<<endl;} voidF(int&&a){  //dosomething  cout<<"in......
  • C++语言亚马逊国际获取AMAZON商品详情 API接口
    跨境电子商务是一种全新的互联网电商模式,运用电子化方式促成线上跨境交易,利用跨境物流运送商品,有利于打破传统的贸易格局,成为新的经济增长点。对我国来说,跨境电商平台正用一种全新的力量改变我国产业链的结构,并有利于增加贸易机会,拓展我国外贸在国际市场的广度与深度,赢得广阔的海......
  • go语言 把python项目打包、变量类型、常量、函数基础、函数高级
    把python项目打包#https://zhuanlan.zhihu.com/p/624648232#python----》setuptools--》whl包结构公司内部写了包---》公司内部用---》开源出来公司写好的项目,打包好,发给客户,客户可以直接运行起来#你们下的第三方包都是:requests-2.28.2-py3-none-any.whlwhl......