首页 > 编程语言 > 从C到C++(三)

从C到C++(三)

时间:2023-02-20 16:55:16浏览次数:28  
标签:const 变量 int C++ 引用 实参 指针

目录

一、引用

1、引用是给一个变量起别名,没有自己独立的空间,要与它所引用的变量共享空间。对引用所做的改变实际上就是对它所引用的变量做改变

2、定义引用的一般格式:

  • 类型 &引用名 = 变量名;

  • 例如:

    • int a = 1;
      int &b = a;
      //b是a的别名,因此a和b是同一个单元
      
  • 注意! 定义引用时一定要初始化,指明该引用变量是谁的别名。引用一经初始化,不能重新指向其他变量

  • 在实际的应用中,引用一般用作参数传递与返回值

二、const引用

const引用是指向const对象的引用(也可以指向非const对象)

  • const int ival = 1024;
    const int& ref1 = ival;  //合法
    int& ref2 = ival;  //非法
    

三、引用传递

1、引用传递方式是在函数定义时在形参前面加上 &

​ 如:swap(int& a, int& b);

2、按值传递的方式容易理解,但形参值的改变不能对实参产生影响

3、地址传递方式通过形参的改变使相应的实参改变,但程序容易产生错误且难以阅读

4、引用作为参数对形参的任何操作都能改变相应的实参数据,又使得函数调用方便、自然

四、引用作为函数返回值

1、函数返回引用的一个主要目的是可以将函数放在赋值运算符的左边

2、不能返回对局部变量或者自动化变量的引用

五、引用与指针的区别

1、引用访问一个变量是直接访问,而指针是间接访问

2、引用是一个变量的别名,本身不单独分配自己的内存空间,而指针有自己的内存空间

3、引用一经初始化,不能重新指向其他变量,而指针可以(只要不是const指针)

4、C++中尽可能使用引用,不得已时使用指针

  • 原因在于
    • 值传递中,实参要初始化形参且要分配空间,将实参内容拷贝到形参,涉及类时要考虑拷贝构造函数
    • 引用传递中,实参初始化形参时不分配空间,效率更高
    • 指针传递中,本质仍是值传递,实参初始化形参也要分配4字节空间(对于32位系统,64位系统为8字节)如果要修改指针的地址,单纯用指针传递是不行的,只能修改指针所指向变量的内容,除非使用指针的指针 **或者指针引用 *&

标签:const,变量,int,C++,引用,实参,指针
From: https://www.cnblogs.com/rz124/p/17138034.html

相关文章

  • From C++ to Python and a little Java
    原创不意味着能得到“知识产权”。FromC++toPythonandalittleJava从C++到Python以及对Java的小观点OutputPython:printf'\n'C++:std::coutprintformat......
  • C/C++旅游区景点导游系统[2023-02-20]
    C/C++旅游区景点导游系统[2023-02-20][题目1]旅游区景点导游系统针对游客的不同需求,设计一款旅游区景点导游系统基本功能及要求如下:1、提供用户操作的菜单和界面,实现系......
  • C++ getline整行读入以及使用stringstream 按分隔字符split出单词
    问题:直接通过while(cin>>str),遇到空格就会停止。比如,输入dfahadfjdjfak只能输入前两个单词。解决:要读入一整行,需通过getline(cin,inputLine)读入。按分隔符split字......
  • c++关键字学习
    const修饰普通变量const有以下几个方面的作用:1)定义const常量,具有不可变性(只读变量)。2)进行类型检查,使编译器对处理内容有更多了解,消除一些隐患。3)避免意义模糊的数字出......
  • 第13届蓝桥杯青少年组C++第5题 金箍棒
    解题思路首先猜想最终相等的元素t的范围,最终应为数组中的某个元素。若t小于数组中所有的元素,则此时增大t,那么所有元素变为t的次数将减小,可见t并非最优解;若t大于数组中......
  • 线段树板子C++
    structnode{intl,r,sum,lazy;node*lson,*rson;node(){l=r=sum=lazy=0;lson=rson......
  • 从C到C++
    从C到C++(二)目录从C到C++(二)一、域运算符C++中新增作用域标识符:::二、new、delete运算符new运算符可以用于创建堆空间三、重载四、namemanagling与extern“C”五、带默认......
  • C、C++、python、java
    C++和Python的区别python是一种脚本语言,是解释执行的,而C++是编译语言,是需要编译后在特定平台运行的。python可以很方便的跨平台,但是效率没有C++高。Python使用缩进来区......
  • C/C++学生选课管理系统[2023-02-20]
    C/C++学生选课管理系统[2023-02-20]4.15学生选课管理系统题目描述:假定有n门课程,每门课程有课程编号,课程名称,课程性质(必须/选修),学时,授课学时,实验或上机学时,学分等信......
  • C++ primer 5th 第一章阅读笔记
    第一章开始第一节编写一个简单的C++程序不同编译器使用不同的后缀命名约定,比如cc、cpp、c。比如main程序保存到prog1.cc中,可以使用如下命令来编译它:ccprog1.cc。其中......