复杂引用



1.通过引用来引用数组(一维数组)

#include
<iostream>

#include
<stdlib.h>

/*引用就是给原来的变量有一个别名同一个地址*/

void
main()

{

int
a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

int(&ra)[10](a);

int
i = 0;

for (auto
data:ra) 
//C++11的循环

{

data =
i + 5;

std::cout
<< data <<
std::endl;

}

std::cout
<< a <<
" " <<
ra <<
std::endl;

std::cout
<< &a <<
" " << &ra
<< std::endl;

system("pause");

}

2.引用二维数组的方式

#include
<iostream>

#include
<stdlib.h>

void
main()

{

int
a[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

//引用就是给原来的变量有一个别名同一个地址

int(&ra)[2][5](a);

for (int
i = 0;
i < 2;i++)

{

for (int
j = 0;
j < 5;j++)

{

std::cout
<< " " <<
ra[i][j];

}

std::cout
<< "\n";

}

std::cout
<< a <<
" " <<
ra <<
std::endl;

std::cout
<< &a <<
" " << &ra
<< std::endl;

system("pause");

}

3.引用函数指针

#include
<iostream>

#include
<stdlib.h>

int
jia(int
a,
int
b)

{

return
a +
b;

}

int
jian(int
a,
int
b)

{

return
a -
b;

}

//函数指针int (*rp)(int a,int b)

void
change(int(*
& rp)(int,
int))

{

rp =
jian;

}

int(*&
changep(int(*&rp)(int,
int)))(int,
int)

{

rp =
jian;

return
rp;

}

void
main()

{

int(*p)(int
a,
int
b)(jia);

std::cout
<< p(1, 2) <<
std::endl;

change(p);

std::cout
<< p(1, 2) <<
std::endl;

std::cout
<< "-----------------------" <<
std::endl;

p =
changep(p);

std::cout
<< p(1, 2) <<
std::endl;

system("pause");

}

4.数组中的元素不能为引用

5.引用的本质是指针,直接sizeof引用,就是引用的数据大小,引用变量占据4个字节

#include
<iostream>

class
MyClass{

char &
a;

char &
b;

char &
c;//引用的本质是指针,直接sizeof引用,就是求引用的数据大小

//引用变量占据4个字节

};

void
main()

{

int
num = 10;

int &
rnum(num);

double
db = 10.9;

double &
rdb(db); 
//直接作用引用的变量

std::cout
<< sizeof(rnum)
<< std::endl;

std::cout
<< sizeof(rdb)
<< std::endl;

std::cout
<< sizeof(MyClass)
<< std::endl;

system("pause");

}

运行结果如下:

#include
<iostream>

int 
getdata(int
&& num)//右值引用,节约内存拷贝,内存优化所必须

{

std::cout
<< num <<
std::endl;

num += 10;

return
num;

}

void 
main7()

{

int
a = 5;

int
b = 4;

std::cout
<< getdata(a
+ 1) << std::endl;

system("pause");

}

//左值,一般可以取地址就是左值

//右值某些情况可以,某些情况不可以

void
main8()

{

int
a = 3;

int
b =
a + 1;//右值->左值

std::cout
<< getdata(std::move(a))
<< std::endl;

//std::move将左值转换为右值,C++11

}

void
main9()

{

//const int num(6);

char
str[10]("hello");//限定字符串不被修改

const
char *pc(str);//指向常量的指针限定了指向的数据无法修改,+1,+2,+3

str[3] =
‘x‘;//可以,

//pc[3] = ‘y‘;

//*(pc + 3) = ‘y‘;

pc =
"world";

system("pause");

}

void
main10()

{

char
str[10]("hello");

const
char(&rstr)[10](str);//常量引用

const
char(&rrstr)[10](rstr);//引用可以给另一个引用初始化

str[4] =
‘X‘;

//rstr[4] = ‘Y‘;

}

void 
main11()

{

int(*p)(int
a,
int
b)(jia);

std::cout
<< p(1, 2) <<
std::endl;

int(*const
&rp)(int
a,
int
b)(p);//引用函数指针

//rp=jian;//()仅仅适用于初始化

}

复杂引用,布布扣,bubuko.com

时间: 2024-08-03 20:32:05

复杂引用的相关文章

.net 工程中引用出现感叹号

在工程中引用出现感叹号,有两个原因 原因1:  这是由于之前引用的Dll文件不见了. 右键有感叹号的项,然后选择 "属性" 里边有一个路径属性 这个路径就是之前这个Dll文件的路径,现在这个文件不在了,你需要找到现在这个文件的路径 右键有感叹号的项,然后选择"移除" 右键"引用",选择添加引用,然后选择那个不在的dll的真实路径 其他的项用相同的方式处理 原因2:可能是引用的.Net版本高于了当前工程的.Net版本 更改所引用的工程文件的.Net

C# 动态生成WebService,无需添加引用

C#项目调用WebService是很常见的现象,但一旦修改链接地址就需要重新更新引用很是麻烦,这里跟大家分享一个通过地址,无需添加引用动态生成Webservice的小方法 方法类: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.ServiceModel; 6 using System.ServiceModel.Channels

C++学习笔记----2.4 C++引用在本质上是什么,它和指针到底有什么区别

从概念上讲.指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变. 而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的(自始至终只能依附于同一个变量). 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值.值传递过程中,被调

DLL引用摘录

最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比如Windows中的一些功能,C++中已经编写好的一些方法)要重新编写代码,C#有没有方法可以直接都用这些原本已经存在的功能呢?答案是肯定的,大家可以通过C#中的DllImport直接调用这些功能. DllImport是System.Runtime.InteropServices命名空间下的一个属性

PHP中引用类的属性

在一个类中,可以访问一个特殊的指针--$this.如果当前类的一个属性为$attribute,则当在该类中通过一个操作设置或访问该变量时,可以使用$this->attribute来引用. class classname { public $attribute; function operation($param) { $this->attibute = $param echo $this->attribute; } }

使用软引用和弱引用防止内存溢出

下面以使用软引用为例来详细说明.弱引用的使用方式与软引用是类似的. 假设我们的应用会用到大量的默认图片,比如应用中有默认的头像,默认游戏图标等等,这些图片很多地方会用到.如果每次都去读取图片,由于读取文件需要硬件操作,速度较慢,会导致性能较低.所以我们考虑将图片缓存起来,需要的时候直接从内存中读取.但是,由于图片占用内存空间比较大,缓存很多图片需要很多的内存,就可能比较容易发生OutOfMemory异常.这时,我们可以考虑使用软引用技术来避免这个问题发生. 首先定义一个HashMap,保存软引用

引用传递

引用传递的本质就在于别名,而这个别名只不过是放在了栈内存之中,既:一块堆内存可以被对个栈内存所指向 举例: Person per1 = new Person(); per1.name = "小于子"; per1.age = 30; Person2 oper2 = per1; oper2.name = "狗剩"; 在程序开发中,所谓的垃圾空间指的是没有任何栈内存指向的堆内存空间,所有的垃圾空间将不定期被java的垃圾收集器(GC.Garbage Collector)进

this的引用

每个对象都可以使用this关键字引用本身.如果一个类的方法需要访问该类本身的成员变量或其他方法,就应该使用this,其实在引用的学习中我们已经接触到额this的引用,只不过那时不懂,在我们使用引用的时候,我们没有显示地添加this引用,呢么编译器会自动的为 我们添加上,我们尅将this应用作为参数给一个方法,通过这种方式一个对象可以将它本身的引用传给其他对象. 如果一个构造器用this关键字来调用本类中的其他构造器,那么这个this语句必须是本构造器的第一行否则,会产生一个编译错误.在Java中

Android中的WeakReference 弱引用

WeakReference 弱引用 定义:弱引用,与强引用(我们常见的引用方式)相对:特点是:GC在回收时会忽略掉弱引用对象(忽略掉这种引用关系),即:就算弱引用指向了某个对象,但只要该对象没有被强引用指向,该对象也会被GC检查时回收掉. 强引用实例自然不会被GC回收! 如何引出弱引用?弱引用的实际用途是什么? 什么是内存泄漏?Java使用有向图机制,通过GC自动检查内存中的对象:如果GC发现一个或一组对象为不可达的状态,则将该对象从内存中回收.也就是说:一个对象不被任何引用所指向,则该对象会在

MVC,MVP 和 MVVM 的图示 引用地址(http://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html)

分类: 开发者手册 MVC,MVP 和 MVVM 的图示 作者: 阮一峰 日期: 2015年2月 1日 复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用.它本身很容易理解,但是要讲清楚,它与衍生的 MVP 和 MVVM 架构的区别就不容易了. 昨天晚上,我读了<Scaling Isomorphic Javascript Code>,突然意识到,它们的区别非常简单.我用几段话,就可以说清. (题图: