IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++引用和指针--指针作为形参、返回值;引用作为形参、作为返回值 -> 正文阅读

[C++知识库]C++引用和指针--指针作为形参、返回值;引用作为形参、作为返回值

指针的分类

//普通指针
int a = 10;
int* p = &a;
//第一类指针:常量指针;指向的地址可改,指向的地址中的数据不可改
const int* p1 = &a;
//第二类指针:指针常量;指向的地址不可改,指向的地址中的数据可改
int* const p2 = &a;
//第三类指针:const int* const p;指向的地址和指向的地址中的数据都不可以改
const int* const p3 = &a;

指针保存的是一个地址,定义指针是在内存中重新申请一个内存保存指向的地址,指针p要访问指向的地址的数据需要解引用*p

引用

引用是对已经存在的数据重新命名一个别名,
引用的本质是一个第二类指针,指向不可更改。
引用和指针不同的地方是:指针p保存的是地址,引用后的新标识符newName是保存的数值,
访问数据时指针使用*p,引用使用newName

测试代码

#include <iostream>

int* fun1(int *num)//返回值类型是止指针类型的数据,返回值保存的是一个指针()地址
{
	//指针的方式传输参数,形参num更改,那么对应的传进来的实参也会有相应的更改
	*num += 100;//指针需要解引用才能对指针指向的数据进行操作
	return num;//返回的是指针保存的地址,在函数体外部新建一个变量接收指针保存的地址
}

int& fun2(int& num)//返回值类型是引用的方式进行返回的,
{
	//引用本质是指针常量,但是,引用和指针的区别:指针还需要解引用才能读出指针指向的数据,但是引用不需要
	//num是对实参的一个别名,和实参一起共享在内存中的地址和数据,但是形参改变实参也会随着改变
	num += 200;//
	return num;//返回的是数值,引用的方式返回,在函数体外部给返回值起一个别名接收数据
}

int& fun3(int* num)//返回值是引用的方式,return的是一个数值
{
	*num += 500;//形参是一个指针,解引用后才是数据
	return *num;//对指针进行解引用后,将数值通过引用的方式返回,在函数体外部给数值起一个别名接收数据
}

int main()
{
	int num1 = 1;
	int num2 = 2;
	int  num3 = 3;
	int* p = fun1(&num1);//形参是指针,返回值是指针,
	int p1 = fun2(num2);//形参是引用,返回值是引用
	int p2 = fun3(&num3);//形参是指针,返回值是引用

	std::cout << "num1:" << num1 << std::endl;
	std::cout << "num2:" << num2 << std::endl;
	std::cout << "num3:" << num3 << std::endl;

	std::cout << "fun1返回值是指针:" << *p << std::endl;
	std::cout << "fun2返回值是引用:" << p1 << std::endl;
	std::cout << "sun3返回值是引用:" << p2 << std::endl;

	system("pause");
	return 0;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:43:52  更:2022-03-06 12:47:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:48:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码