首页 > 代码库 > 复杂引用
复杂引用
1.通过引用来引用数组(一维数组)
#include<iostream>
#include<stdlib.h>
/*引用就是给原来的变量有一个别名同一个地址*/
voidmain()
{
inta[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int(&ra)[10](a);
inti = 0;
for (autodata: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>
voidmain()
{
inta[2][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//引用就是给原来的变量有一个别名同一个地址
int(&ra)[2][5](a);
for (inti = 0;i < 2;i++)
{
for (intj = 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>
intjia(inta,intb)
{
returna +b;
}
intjian(inta,intb)
{
returna -b;
}
//函数指针int (*rp)(int a,int b)
voidchange(int(* & rp)(int,int))
{
rp =jian;
}
int(*&changep(int(*&rp)(int,int)))(int,int)
{
rp =jian;
returnrp;
}
voidmain()
{
int(*p)(inta,intb)(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>
classMyClass{
char &a;
char &b;
char &c;//引用的本质是指针,直接sizeof引用,就是求引用的数据大小
//引用变量占据4个字节
};
voidmain()
{
intnum = 10;
int &rnum(num);
doubledb = 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;
returnnum;
}
void main7()
{
inta = 5;
intb = 4;
std::cout << getdata(a + 1) << std::endl;
system("pause");
}
//左值,一般可以取地址就是左值
//右值某些情况可以,某些情况不可以
voidmain8()
{
inta = 3;
intb =a + 1;//右值->左值
std::cout << getdata(std::move(a)) << std::endl;
//std::move将左值转换为右值,C++11
}
voidmain9()
{
//const int num(6);
charstr[10]("hello");//限定字符串不被修改
constchar *pc(str);//指向常量的指针限定了指向的数据无法修改,+1,+2,+3
str[3] =‘x‘;//可以,
//pc[3] = ‘y‘;
//*(pc + 3) = ‘y‘;
pc ="world";
system("pause");
}
voidmain10()
{
charstr[10]("hello");
constchar(&rstr)[10](str);//常量引用
constchar(&rrstr)[10](rstr);//引用可以给另一个引用初始化
str[4] =‘X‘;
//rstr[4] = ‘Y‘;
}
void main11()
{
int(*p)(inta,intb)(jia);
std::cout << p(1, 2) <<std::endl;
int(*const &rp)(inta,intb)(p);//引用函数指针
//rp=jian;//()仅仅适用于初始化
}