范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

c引用详解

  铺垫:
  变量名实质上是一段连续存储空间的别名,是一个标号
  程序中通过变量来申请并命名内存空间
  通过变量的名字可以使用存储空间
  (能不能再名字的基础上在起个名字?)
  概念:
  1) 可以看做一个已定义变量的别名
  引用是c++的语法范畴,不能再用c语言的思想去思考问题(间接修改)
  属于c++编译器对c的扩展
  引用做函数参数
  普通引用在声明时必须用其他的变量进行初始化
  引用作为函数参数声明时不进行初始化#include using namespace std; //引用基本用法 void main() { 	 	int a = 10; 	int &b = a; 	b = 100; 	printf("b:%d ", b); 	printf("a:%d ", a); 	cout << "hello...." << endl; 	system("pause"); 	return; } void main11() { 	int a = 10; 	int &b = a; 	//int &c;  //普通引用必须要初始化 	system("pause"); } void myswap01(int a, int b) { 	int c = 0; 	c = a; 	a = b; 	b = c; } void myswap02(int *a,int *b) { 	int c = 0; 	c = *a; 	*a = *b; 	*b = c; } void myswap03(int &a, int &b) { 	int c = 0; 	c = a; 	a = b; 	b = c; } void  main() { 	int x, y; 	x = 10; 	y = 20; 	myswap01(x, y); 	printf("x:%d,y:%d ", x, y); 	myswap02(&x, &y); 	printf("x:%d,y:%d ", x, y); 	myswap03(x, y); 	printf("x:%d,y:%d ", x, y); 	system("pause"); } //复杂数据类型 的引用 struct Teacher { 	char name[64]; 	int  age; }; void printfT(Teacher *pT) { 	cout << pT->age << endl;  } //pT是t1的别名,相当于修改了t1 void printfT2(Teacher &pT) { 	cout << pT.age << endl;  } //pT和t1是两个不同的变量 void printfT3(Teacher pT) { 	cout << pT.age << endl; pT.age=45;//只会修改pT变量,不会修改t1变量 } void main() { 	Teacher t1; 	t1.age = 35; 	printfT(&t1); 	printfT2(t1);//pT是t1的别名   printfT3(t1);//pT是形参,t1拷贝了一份数据,给pT   printf("t1.age:%d ",t1.age); 	cout << "hello...." << endl; 	system("pause"); 	return; }
  引用的意义
  引用作为其他指针变量的别名而存在,因此在一些场合可以替代指针
  引用相对于指针来说具有更好的可读性和实用性
  引用的本质
  c++编译器背后做了什么工作
  单独定义的时候必须初始化--->很像常量
  1)引用在c++内部实现是一个常指针
  2)c++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占的空间与指针相同
  3)从使用的角度,引用会让人误会其只是一个别名,没有自己的储存空间,这是c++为了实用性做出的细节隐藏.
  结论 :当我们使用引用的语法时,我们不用去关心编译器引用是怎么做了
  当我们分析奇怪的语法现象时,才去考虑编译器是怎么做的#include using namespace std; void main01() { 	const int c1 = 10; 	int a = 10; 	int &b = a;//像常量 	printf("&a:%d ", &a); 	printf("&b:%d ", &b);//a b就是同一块内存空间的门牌号   依附于这个内存空间 	cout << "hello.." << endl; 	system("pause"); 	return; } //普通引用有自己的空间吗?-->有,和指针所占的一样 struct Teacher { 	char name[64];//64 	int age;//4 	int &a;//4 	int &b;//4 }; //引用的本质一个常量指针 void main() { 	printf("sizeof(Teacher):%d ", sizeof(Teacher); 	system("pause"); }  void  modifyA(int &a1) { 	a1 = 100; } void  modifyA2(int* const a1) { 	*a1 = 10;//*实参的地址,去间接修改实参的值 } void main() { 	int a = 10; 	modifyA(a);//指向这个函数调用的时候,我们程序员不需要取a的地址 	printf("a:%d ", a);  	modifyA2(&a);//如果是指针 需要我们手工去取实参地址 	printf("sizeof(Teacher):%d ", sizeof(Teacher)); 	system("pause"); }  //间接赋值 //间接赋值成立的三个条件 /* 1 定义2个变量 2 建立关系  实参取地址传给形参 3 形参间接修改实参的值 */ void  modifyA3(int *p) { 	*p = 190;//3 } void main() { 	int a = 10; 	int *p = NULL; //1 	p = &a; 	*p = 100; 	{ 		*p = 200; 	} 	modifyA3(&a);//2 } //引用是间接赋值哪几个条件的组合?     2编译器做了 //1   23后2个条件写在一起了         只不过2编译器做了
  函数返回值是引用(引用当左值)
  c++引用使用时的难点:
  当函数返回值为引用时,
  若返回栈变量 ,不能成为其他引用的初始值,不能作为左值使用
  若返回静态变量或全局变量  可以成为其他引用的初始值.
  即可作为右值使用,也可作为左值使用#include using namespace std; int getAA1() { 	int a; 	a = 10; 	return a; } //返回a的本身 int& getAA2() { 	int a; 	a = 10; 	return a; } int* getAA3() { 	int a; 	a = 10; 	return &a; }  void main01() { 	int a1 = 0; 	int a2 = 0; 	a1 = getAA1(); 	a2 = getAA2(); 	int &a3= getAA2(); 	printf("a1:%d ", a1); 	printf("a2:%d ", a2); 	printf("a3:%d ", a3); 	cout << "hello.." << endl; 	system("pause"); 	return; } //返回静态/全局 int j() { 	static int a = 10; 	a++; 	return a; } int &j() { 	static int a = 10; 	a++; 	return a;  } void main() { 	int a1 = 10; 	int a2 = 20; 	a1 = j1(); 	a2 = j2(); 	int &a3 = j2(); 	printf("a1:%d ", a1); 	printf("a2:%d ", a2); 	printf("a3:%d ", a3); 	cout << "hello.." << endl; 	system("pause"); 	return;  } //函数当左值  //返回变量的值 int g() { 	static int a = 10; 	a++; 	return a; } //返回变量本身 int &g() { 	static int a = 10; 	a++; 	return a; } void main() { 	//g1() = 100;//执行这个,函数返回值就是11.不成立err 	g2() = 100;//把上面的函数改成了100,所以这个就成立  	system("pause"); }
  指针的引用#include using namespace std; struct Teacher { 	char name[64]; 	int age;  }; int getTeacher(Teacher **p) { 	Teacher *tmp = NULL; 	if (p == NULL) 	{ 		return -1; 	} 	tmp = (Teacher*)malloc(sizeof(Teacher)); 	if (tmp == NULL) 	{ 		return -2; 	} 	p->age = 33; 	*p = tmp; } //指针的引用做函数参数 int getTeacher2(Teacher* &myp) {//给myp赋值相当于给主函数中的pT1赋值 	myp = (Teacher*)malloc(sizeof(Teacher)); 	if (myp == NULL) 	{ 		return -1; 	} 	p->age = 36; } void FreeTeacher(Teacher *pT1) { 	if (pT1 == NULL) 	{ 		return; 	} 	free(pT1); } void main() { 	Teacher *pT1 = NULL; 	getTeacher(&pT1);//二级指针 	cout << "age:" << pT1->age << endl; 	FreeTeacher(pT1);  	getTeacher2(pT1);//引用 	cout << "age:" << pT1->age << endl; 	FreeTeacher(pT1); 	cout << "hello.." << endl; 	system("pause"); 	return; }
  c++中的const常量
  可能分配内存空间,也可能不分配
  当const常量为全局,并且需要在其他文件中使用,会分配空间
  在使用&操作符,取const常量的地址,会分配
  当const修饰引用,会分配#include using namespace std;  void main() { 	int x = 20; 	const int &y = x;//常引用  让变量拥有只读属性 不同通过y去修改x了 	//常引用初始化分为2种情况//1)用变量 初始化 常引用 	{ 		int x1 = 30; 		const int &y1 = x1; 	 	} 	//2)用字面量 初始化 常引用 	{ 		const int a = 40; 		int &m = 41;//普通引用 引用一个字面量 		//字面量有没有内存地址?-->没有  	} 	cout << "hello.." << endl; 	system("pause"); 	return; }
  结论:
  const &int e==const int* const e
  普通引用==int const e
  当使用常量对const引用进行初始化时,编译器会为常量值分配空间,并用引用名作为这段空间的别名
  使用字面量对const引用初始化后,将生成一个只读变量

网友买到国行iPhone13ProMax监管机,容易反锁,不推荐购买苹果的监管机其实很多年前就有了,但是知道的人很少,因为大部分监管机都是企业采购之后给自己员工使用,或在某些场所里当做工具,比如某火锅店里的iPad。但随着国内租借平台越来越多,租借Mate50再次爆料确定7月发布独特方式实现5G月中的时候,网上就有传言称华为全新的Mate50系列旗舰将会于7月份发布,今日该消息又在网上得到了一些证实。据一位博主带来的爆料称,华为Mate50系列的发布日期已经确定了是7月,便宜的备用手机,有何推荐?感谢您的阅读!有哪些便宜的备用手机可以推荐。其实,备用手机很多,当然我们考虑的备用手机我觉得有几点很重要。1。备用手机的续航能力要很强。2。备用手机的屏幕表现要很强。我的意思我不建冷冻电镜看到了真实的原子!它的样子符合科学预测吗?地球上所有物质都是由原子组成的,原子是形成物质特性的最小单位。最小的氢原子尺度直径约为1010米,也就是0。1纳米,或者说百亿分之一米氢原子的质量约为1。6741027千克,1个针解决Win10系统脚本无法正常运行,因为在此系统上禁止运行脚本法加载文件DPythondemovenvScriptsactivate。ps1,因为在此系统上禁止运行脚本首先我们需要打开powerShell用管理员方式打开,这样可以确保你输入的互联网保险服务呈现三大趋势作为互联网的原住民,年青人对互联网保险有着天然的接受度,其中,快捷方便的服务已成他们投保的首选要素。近日,众安保险发布Z世代的底气2022年新青年互联网保险服务体验趋势洞察(下称报TikTok跨境电商TikTok上获亿播办公用品品类,哪些产品值得卖?市场有77。7的商品主要有纸张和纸板组成,比如商务报表,文件夹,档案袋,剩下的22。3则来源于书写文具,办公配件。大多数的文具用品风格及色彩成为了消费者购买的重要因素之一。在Tik锤子手机,是笑柄还是弄潮儿在鸿蒙还没有出现的2012年,锤子科技诞生。翌年推出的SmartisanOS,发布会可谓精彩异常。一个英语老师创办的手机公司,推出了的一款想和MIUI和iOS掰手腕的产品,搁谁都想跌至1299元,骁龙778G五千毫安LCD屏,OPPO终于良心了说到高性价比的手机,相信大家都会想到红米,毕竟从老大哥小米开始,它就是发烧的代表,然而如今的手机市场,已经不再是过去的一家独大,很多厂商开始展开追逐战,蓝绿兄弟都有自己的子品牌,用刘世锦国内有些新能源汽车不比特斯拉差,我们要有信心能源人都在看,点击右上角加关注国内对特斯拉工厂设在上海有不同的意见,有声音认为特斯拉上海工厂占了国内的市场,使得有些企业没有竞争力。国务院发展研究中心原副主任刘世锦在2022清华五别克微蓝7配置升级,售价下调1。8万元,看完你心动了吗别克微蓝7配置升级,售价下调1。8万元,看完你心动了吗在国内新能源市场中,传统车企的表现明显不如造车新势力亮眼,这一点也是可以理解的,毕竟传统车企深耕燃油车市场多年,一时半会儿难以
小米MIXFold2再曝光!主打轻薄,不支持无线充,影像一般从去年开始,折叠屏手机市场开始热闹起来,越来越多的玩家开始推出自家的折叠屏产品,除了老牌的华为三星,还有荣耀vivo小米等等厂商,按照正常的迭代规律,小米的第二代折叠屏产品应该会在世界知名音箱品牌(一)欧洲篇作为音乐和知名乐队无数的欧洲,历来不缺音响品牌,其中大名鼎鼎的无数。而且新的品牌常常突然就冒一家出来,实力还非常强。一Estelon爱诗特浓爱沙尼亚Estelon来自爱沙尼亚香港金管局发出3张虚拟银行牌照,还有5份申请在处理3月27日下午,香港金融管理局在官网公布首批获得虚拟银行牌照的名单。据官网消息,金融管理专员已根据银行业条例向LiviVBLimitedSCDigitalSolutionsLimi华为推FreeLace无线耳机和新款WATCHGTP30好搭档在昨天的发布会上,华为在发布P30系列手机的同时也一起发布了FreeLace无线耳机和新款WATCHGT。其中Freelace可以通过隐藏式设计的USBtypeC接口与华为手机配对华为最强大的千元机来了!标配128GB大内存2400万三摄NFC2019年很明显的一个趋势便是智能手机行业步入了技术战。反向无线充电超级快充10倍光学变焦等技术层出不穷。不过从整个市场来说,高端技术往往是旗舰机型专属,而性价比相对较高的中低端机共享农房成潮流,农民提出3点担忧共享农房这个概念最近火了,一方面是现在全国各地的农村都有很多闲置农房,如果能够开发利用起来,原本让人头疼的资源浪费问题,反而能成为摇钱树但另一方面,共享农房不像共享单车共享汽车,闲明略科技宣布完成20亿元D轮融资,CEO吴明辉要带领明略成为超级独角兽3月27日,明略数据在京举办发布会,会上,CEO吴明辉宣布明略数据改名为明略科技集团。他告诉与会者,不久前,明略科技完成20亿元D轮融资。该轮融资由腾讯领投,金拓资本华兴新经济基金骄傲!中国这4家无晶圆厂IC公司销售额在全球领跑据ICInsights称,美国公司继续主导无晶圆厂IC销售,占合约晶圆厂服务市场份额的68。中国在无晶圆厂IC市场上获得了市场份额,从2010年的5增加到2018年的13。在201控制柜也智能,兼顾经济和高效作为工业现场的枢纽,无论是智能工厂还是小型作坊,控制柜都是不可或缺且非常常见的配置,但也因此在升级优化中成为被忽视的对象。随着制造技术的不断发展,在需求的促使下,控制柜也逐渐向着数Linux系统中切换用户使用su和su命令的本质Linux系统中切换用户使用su和su命令的本质suswitchuser,切换用户的简写。(1)suusername切换用户后,同时切换到新用户的工作环境中。(2)suuserna已有网友提前上手三星GalaxyFold折痕没那么糟IT之家3月27日消息名为MishaalRahman的Twitter网友发文称,自己已经提前拿到了三星可折叠手机GalaxyFold,但不能曝光新机的图片和视频,不过他回答了网友的