何为引用法---细谈C++引用
何为引用...给已有的变量取别名
int num = ;
int &a = num;//此处 &不是取地址 而是标明 a是引用变量(a 是 num的别名)
int num = ;
int &a = num; int data = ;
a = data;//不是data别名为a 而是将data值赋值a(num)
案例:
int num = ;
int &a = num;//a就是num的别名 a==num cout<<"num = "<<num<<endl;//10
//对a赋值 == 对num赋值
a=;
cout<<"num = "<<num<<endl;//100 //a是num的别名 所以num和a具有相同的地址空间
cout<<"a 的地址:"<<&a<<endl;
cout<<"num 的地址:"<<&num<<endl;
了解完如何简单应用引用,接着来深挖【引用--给数组取个别名】
void test02()
{
int arr[] = {,,,,};
//需求:给arr起个别名
int (&my_arr)[] = arr;//my_arr就是数组arr的别名 int i=;
for(i=;i<;i++)
{
cout<<my_arr[i]<<" ";
}
cout<<endl;
}
还有,引用作为函数的参数
void my_swap1(int a,int b)
{
int tmp = a;
a = b;
b=tmp;
}
void my_swap2(int *a,int *b)//a=&data1,b =data2;
{
int tmp = *a;
*a = *b;
*b = tmp;
} void my_swap3(int &a, int &b)//a=data1,b=data2
{
int tmp = a;
a = b;
b= tmp;
}
void test04()
{
int data1 = ,data2=;
cout<<"data1 = "<<data1<<", data2 = "<<data2<<endl;
//my_swap1(data1,data2);//交换失败
//my_swap2(&data1,&data2);//交换成功
my_swap3(data1,data2);//交换成功(推荐)
cout<<"data1 = "<<data1<<", data2 = "<<data2<<endl;
}
指针的引用
#include<stdlib.h>
#include<string.h>
void my_str1(char **p_str)//p_str = &str
{
//*p_str == *&str == str
*p_str = (char *)calloc(,);
strcpy(*p_str, "hello world"); return;
}
void my_str2(char* &my_str)//char* &my_str = str;my_str等价str
{
my_str = (char *)calloc(,);
strcpy(my_str, "hello world");
return;
}
void test07()
{
char *str = NULL;
//需求:封装一个函数 从堆区 给str申请一个空间 并赋值为"hello world"
//my_str1(&str);
my_str2(str);
cout<<"str = "<<str<<endl;
free(str);
}
int data = ;
int &a = data;//a就是data的别名
//编译器内存转换:int * const a = &data; a=;//等价于data=100
//*a = 100;//*a == data
何为引用法---细谈C++引用的更多相关文章
- 浅谈Java引用和Threadlocal的那些事
这篇文章主要介绍了Java引用和Threadlocal的那些事,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1 背景 某一天在某一个群里面的某个群友突然提出了一个问 ...
- 细谈unity资源管理的设计
一.概要 本文主要说说Unity是如何管理的,基于何种方式,基于这种管理方式,又该如何规划资源管理,以及构建bundle,是后面需要详细讨论的. 二.Unity的资源管理方式 2.1 资源分类 uni ...
- 细谈unity资源加载和卸载
转载请标明出处:http://www.cnblogs.com/zblade/ 一.概要 在了解unity的资源管理方式之后,接下来细谈一下Unity的资源是如何从磁盘中加载到运行时的内存中,以及又是如 ...
- perl 引用(数组和hash引用) --- perlreftut - Mark 的一个简单的'引用'教程 ---Understand References Today. --Mark Jason Dominus, Plover Systems (mjd-perl-ref+@plover.com)
https://blog.csdn.net/fangwei1235/article/details/8570886 首页 博客 学院 下载 论坛 APP 问答 商城 活动 VIP会员 招聘 ITeye ...
- php中引用&的真正理解-变量引用、函数引用、对象引用
php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. ...
- spring jpa 实体互相引用返回restful数据循环引用报错的问题
spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...
- final修饰的变量是引用不能改变,还是引用的对象不能改变???
对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...
- Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解
在上篇博客中,我们介绍了<hibernate基本概念和体系结构>,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基 ...
- Spark RDD概念学习系列之细谈RDD的弹性(十六)
细谈RDD的弹性 所谓,弹性,是指在内存不够时可以与磁盘进行交换. 弹性之一:自动的进行内存和磁盘数据存储的切换 弹性之二:基于Lineage(血缘)的高效容错 弹性之三:Task如果失败会 ...
随机推荐
- Visual Studio 2017 Professional 下载
可以进行Office 2013/2016 VSTO开发 安装平台:Win 7 SP1.Win 10. 下载: VisualStudio2017_Professional.rar
- elasticsearch用法
基本原理 搜索引擎的索引 倒排序 由value查找key 数据库的索引 由key查找value 用于解决分库分表后的排序分页 like查找 性能问题 日志库的全文搜索 spring集成时使用的不是re ...
- MOOC(6)- case之间存在依赖
方法1:这里只给出根据依赖字段去匹配响应结果中的值的函数,其他匹配依赖case,对依赖case发起请求见下面的方法2 方法2: from day_20200208_mooc.tools.do_exce ...
- Nginx笔记:对url中携带的参数进行多次判断
Nginx中只支持简单的if语句,不支持多条件判断和嵌套,通过特殊的方式也可以达到效果 location / { proxy_set_header Host $host; proxy_set_head ...
- oracle存储过程随笔
有时间要把最近总结的存储过程的问题总结一下,先占坑: create or replace procedure test_proc2 as cursor cur is select YWR,YWRZJH ...
- 林轩田机器学习基石笔记2—Learning to Answer Yes/No
机器学习的整个过程:根据模型H,使用演算法A,在训练样本D上进行训练,得到最好的h,其对应的g就是我们最后需要的机器学习的模型函数,一般g接近于目标函数f.本节课将继续深入探讨机器学习问题,介绍感知机 ...
- Java IO: 并发IO
原文链接 作者: Jakob Jenkov 译者: 李璟 有时候你可能需要并发地处理输入和输出.换句话说,你可能有超过一个线程处理输入和产生输出.比如,你有一个程序需要处理磁盘上的大量文件,这个任务可 ...
- 【阅读笔记】rocketmq 概念与架构 (一)
介绍 rocketmq 框架与基本概念 1. 概念 1.1 namesrv(name server) 记录了 broker 集群信息,消息队列的信息以及 key-value 配置,见 RouteInf ...
- response读取图片+下载图片
读取图片 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import ...
- Java Timer和TimerTask
Timer是JDK中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的任务,可以指定一次或多次. TimerTask是一个实现了Runnable接口的抽象类,代表一个可被执行的任 ...