C++引用的学习-创新互联

C++引入了引用这个类型,引用实际是给变量起了一个别名,实际上,引用只是别名没有独立的内存空间,和它所引用的变量共享内存空间。

成都创新互联主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务林口,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

  变量的属性有两种:名称和空间。

  而引用只有名称没有独立的空间。

  对引用的改变就是对它所引用的变量的改变。

  格式:int a = 1; int& b = a;

   Δ定义引用时一定要初始化,指明该引用变量是谁的别名。

   Δ引用一经初始化不能重新指向其他变量。

   实际引用中,引用一般用作参数传递与返回值。

  1. # include 
  2. usingnamespace
  3. intvoid
  4. int
  5. //定义引用
  6. int//引用必须初始化
  7. //int& refval; error  引用必须初始化
  8. "val =    "
  9. //实际上改变的是val变量
  10. "refval = "//结果是200
  11. int
  12. //这只是简单的赋值,不代表refval引用至val2这个变量   
  13. "val2 =   "//500
  14. return

运行结果:

C++引用的学习

  const引用,指向const对象的引用

   const int ival = 1024; const int& refval = ival;

  Δ普通变量引用const变量是非法的

  const int ival = 1024;  int& refval = ival ; //error

  Δconst变量引用普通变量是合法的。

  1. # include
  2. usingnamespace
  3. intvoid
  4. constint
  5. constint
  6. //  int& ref2 = val;  error,nonconst reference to a const object
  7. "refval = "
  8. int
  9. constint//允许的
  10. //ref3 = 200; 错误的,不能更改const常量
  11. "ref3   = "
  12. double
  13. //warning C4244: “初始化”: 从“double”转换到“const int”,可能丢失数据
  14. constint//等价于产生了一个临时变量,int temp = val3; const int& ref4 = temp
  15. "val3   = "
  16. "ref4   = "
  17. //  int& ref5 = val3;   非const不能引用double类型的变量
  18. return

运行结果:

C++引用的学习

 引用做函数参数传递:

  1. //按引用传递
  2. //swap(int &a, int &b);
  3. //C语言里面:
  4. // 值传递    形参不能更改实参
  5. // 指针传递
  6. //地址传递方式通过形参的改变使相应的实参改变
  7. //引用传递也是可以的
  8. //引用作为参数传递
  9. # include 
  10. usingnamespace
  11. voidintint
  12. intvoid
  13. int
  14. int
  15. "交换前""a = "" b = "
  16. //在函数调用的时候,引用被初始化 , x = a ,y = b
  17. "交换后""a = "" b = "
  18. return
  19. voidintint//形参是引用,调用的时候被初始化
  20. int

运行结果:

C++引用的学习

下面总结下引用于指针的区别:

引用访问一个变量是直接访问,

指针是间接访问

引用只是别名,本身不分配内存空间

指针本身就是一个变量,有自己的内存空间

引用一经初始化就不能再引用其他变量,

指针初始化后引用其他变量,除非const

值传递的时候,实参要初始化形参,就好分配一个形参变量,将实参内容拷贝到形参

如果是类传递的话,还要调用拷贝函数

指针传递 实参初始化形参的时候也是要分配空间的,

引用传递 实参初始化形参时不分配空间,效率会高点

指针传递 本质还是值传递,如果要修改指针的地址,单纯用指针传递也不能的

仅仅修改指针指向的内容,**,指针引用*&

引用作为函数返回值:

  1. //引用作为返回值,将函数放在赋值运算符的左边
  2. # include 
  3. usingnamespace
  4. int
  5. intint
  6. return
  7. //函数返回引用,引用在函数返回的时候初始化
  8. //index(3) 在函数返回的时候被初始化为a[3]
  9. intvoid
  10. //引用作为函数返回值,使得函数可以放在运算符的左边
  11. "a[3] = "//100
  12. return

 运行结果:

C++引用的学习

不能返回对局部变量的引用,或自动化变量的引用:

  • //不能返回对局部变量的引用,或自动化变量的引用 
  •  
  • # include  
  • using namespace std; 
  •  
  • int& add(int a, int b) 
  •     int sum; 
  •     sum = a+b; 
  •      
  •     return sum; 
  • int main(void) 
  •     int n = add(3,4); 
  • //n2是引用没有自己独立的空间,依赖于所引用的变量 
  • //如果n2所引用的变量生命期已经结束了, 
  • //n2也就是无用的引用,也就是不确定的 
  •     int& n2 = add(5,6);  
  •     //cout << "n2 =" << endl; 
  •     cout << "n = " << n  << endl; 
  •     cout << "n2 =" << n2 << endl;//输出不确定的数 
  •      
  •     return 0; 

运行结果:

C++引用的学习

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页题目:C++引用的学习-创新互联
链接URL:http://myzitong.com/article/pdcec.html