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;//指针声明
a=new int(1);//指针定义
int& b=a;//引用初始化

③指针可以改变指向;引用一旦初始化就不可改变
④指针可以指向空值;引用不可为空
⑤在32位编译器上,指针的sizeof为4个字节;引用的sizeof为所指向成员的大小(引用本质是指针,本身占四个字节)
⑥指针可以有多级;引用只有一级
⑦在传参时,都是传成员地址,但指针需要以&a的形式传递;引用则只需要a的形式传递(即对于引用传参,接口使用者不需要知道是数值传参还是引用传参,因为使用形式都一样)

int fun(int& a);
int fun(int* a);
......
int a=1;
int ret=fun(a);//值传递或引用传递
int ret=fun(&a);//指针传递

⑧在C++中引用是对象传递的标准形式(最常见的就是拷贝构造函数都是使用引用传递)
⑨在指针传递时,会产生一个临时指针,然后将该临时指针赋给形参,最后销毁临时指针;引用则是直接将实参赋值给形参,因此传参引用比指针开销略小
⑩返回函数局部对象需要用到指针,此时在函数中不需要delete,指针指向的对象就不会销毁,再把指针通过return复制一份传给主调函数,就可以在主调函数中使用该指针使用被调函数的局部对象(但一定要记得在主调函数中delete该指针);返回函数局部对象若使用引用,对象引用会通过return把引用复制一份传给主调函数,而被调函数中的局部对象被会系统释放掉,外界拿到的引用访问的会是非法内存

class Person {
private:
	string firstname;
	string lastname;
	int age;
	friend ostream& operator << (ostream& os, Person& p);
public:
	Person() {}
	Person(string fn, string ln, int a) :firstname(fn), lastname(ln), age(a) {}	
	Person(const Person& p) ;
};
ostream& operator << (ostream& os, Person& p)
{
	os << p.firstname << " " << p.lastname << " " << p.age << endl;
	return os;
}
Person& fun1()
{
	Person person("a","b",12);
	return person;
}
void main()
{
	Person& ret1 = fun1();
	cout << ret1;
}

在这里插入图片描述

Person* fun2()
{
	Person* person=new Person("a", "b", 12);
	return person;//这里不需要delete指针person
}
void main()
{
	Person* ret2 = fun2();
	cout << *ret2;
	delete ret2;//这里一定要记得delete
}

在这里插入图片描述
欢迎补充指正!!!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-30 15:24:34  更:2021-11-30 15:25:43 
 
开发: 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 10:00:56-

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