C++指针与引用的区别

6 篇文章 0 订阅

指针和引用的区别
①指针是一个变量,存储一个成员的地址;引用是一个常量(指针常量),相当于一个成员的别名
②指针声明和定义可以分开;引用声明时必须初始化

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
}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值