C语言高级编程 数据结构学习预备知识(引用)

注:方便自己复习视频地址

一、引用的基本概念

       引用本质上是指针
指针类型            引用类型
int*              int&
double*            double&
Obeject*               Object&
指针定义           引用定义
int a = 123;           int a = 123;
int* p = &a;           int& r = a;
称作:“p指向了变量a”      “r是目标对象a的引用”或“r引用了变量a”
指针的使用           引用类型
int a = 123;           int a = 123;
int* p = &a;           int& r = a;//引用的定义
*p = 999;               r = 999;//对r的操作,就是对a的操作
       引用可以看作是目标对象的一个别名,对引用的操作其实都是对目标对象的操作。

#include<stdio.h>
#include<string.h>
struct Object
{
	int id;
	char name[16];
};
int main()
{
	Object a = {1,"shaofa"};
	Object& r = a;
	int size = sizeof(r);
	r.rid = 999;
	strcpy(r.name,"xyz");//strcpy,即string copy(字符串复制)的缩写。
	return 0;
}
结果:r的值就是a的值
size的值为20,其中int4char数组为16

      引用必须在定义的时候初始化,也就是一创建就要与目标对象绑定。

int a = 123;
int& r; //语法错误!必须初始化必须int& r = a
相比之下,指针的用法则比较宽松
int a = 123;
int* p;  //指针可以不初始化 
p = &a;

二、引用的更多用法

1.引用作为函数的参数

          和指针类型,引用也可以作为函数的参数,功能相同。

void test (int& a) //int& a = number
{
	a = 999;
}
int main()
{
	int number = 0;
	test(number);
	return 0;
}
结果:number的值变为999
"传引用""传地址"本质相同,相当于对参变量作为了一个初始化,int& a = n;

 参数的传递有两种方式:
     (1)传值(效率低)
     (2)传地址或传引用(效率高)

2.引用作为函数的返回值

      和指针一样,也可以作为函数的返回值。(难点)

#include<stdio.h>
#include<string.h>
int number = 0;//全局变量
int& test ()//初学写法
{
	int& a = number;
	return a;//返回引用
}
/*
int& test ()//简单写法
{
	return number;//函数的返回值类型是引用类型,所以返回number的引用,而不是number的值
}
*/
int main()
{
	int& r = test()//用引用类型接收
	r = 123; //修改目标对象的值
	return 0;
}
结果:number = 123

返回值可作为左值
如:test() = 123;//但是不推荐,代码可读性低

#include<stdio.h>
#include<string.h>
struct Object
{
	int id;
	char name[16];
};
Object one;//全局变量
Object& test ()
{
	return one;//返回全局变量的引用
}
int main()
{
	test().id = 10;//函数的返回值是引用,可以作为左值使用
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值