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;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值