返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >什么是C++引用
  • 138
分享到

什么是C++引用

2023-06-25 12:06:36 138人浏览 薄情痞子
摘要

这篇文章主要介绍“什么是c++引用”,在日常操作中,相信很多人在什么是C++引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是C++引用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、C++ 引用

这篇文章主要介绍“什么是c++引用”,在日常操作中,相信很多人在什么是C++引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是C++引用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、C++ 引用

    变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用,是为己有变量起一个别名。

    声明如下

    int main(){int a;int &b = a;}

    1.规则

    引用没有定义,是一种关系型声明。声明它和原有某一变量的关系。类型与原有类型保持一致,且不分配内存。与被引用的变量有相同的地址。

    声明的时候必须初始化,一经声明,不可变更。

    可对引用,再次引用。多次引用的结果,是某一个变量具有多个别名。

    &符号前面有数据类型时,是引用。其他均为取地址。

    #include <iOStream>using namespace std;int main(){int a,b;int &r = a;int &r = b; //错误,不可更改原有的引用关系float &rr = b; //错误,引用类型不匹配cout<<&a<<&r<<endl; //变量与引用具有相同的地址。int &ra = r; //可对引用更次引用,表示 a 变量有两个别名,分别是 r 和 ra}

    什么是C++引用

    2.应用

    值作函数参数

    void swap(int a, int b); //无法实现两数据的交换void swap(int *p, int *q); //开辟了两个指针空间实现交换

    引用作函数参数

    #include <iostream>using namespace std;void swap(int &a, int &b){int tmp;tmp = a;a = b;b = tmp;}int main(){int a = 3,b = 5;cout<<"a = "<<a<<"b = "<<b<<endl;swap(a,b);cout<<"a = "<<a<<"b = "<<b<<endl;return 0;}

    什么是C++引用

    c++中引入引用后,可以用引用解决的问题。避免用指针来解决。

    3.引用提高

    引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得指针的优良特性。所以再对引用取地址,建立引用的指针没有意义

    1.可以定义指针的引用,但不能定义引用的引用。
    int a;int* p = &a;int*& rp = p; // okint& r = a;int&& rr = r;//error

    例子:

    #include <iostream>using namespace std;void swap(char *pa,char *pb){char *t;t=pa;pa=pb;pb=t;}void swap2(char **pa,char **pb){char *t;t=*pa;*pa=*pb;*pb=t;}void swap3(char *&pa,char *&pb)//指针的引用{char *t;t=pa;pa=pb;pb=t;}int main(){char *pa="china";char *pb="america";cout<<"pa"<<pa<<endl;cout<<"pb"<<pb<<endl;//swap(pa,pb);//swap2(&pa,&pb);swap3(pa,pb);cout<<"pa"<<pa<<endl;cout<<"pb"<<pb<<endl;return 0;}

    什么是C++引用

    2.可以定义指针的指针,不能定义引用的指针。
    int a;int* p = &a;int** pp = &p; // okint& r = a;int&* pr = &r; // error
    3.可以定义指针数组,但不能定义引用数组,可以定义数组引用。
    int a, b, c;int* parr[] = {&a, &b, &c}; // okint& rarr[] = {a, b, c}; // errorint arr[] = {1, 2, 3};int (&rarr)[3] = arr; // ok
    4.常引用

    const 引用有较多使用。它可以防止对象的值被随意修改。因而具有一些特性。

    (1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不合法的。

    这个原因比较简单。既然对象是 const 的,表示不能被修改,引用当然也不能修改,必须使用 const 引用。实际上,const int a=1; int &b=a;这种写法是不合法的,编译不过。

    (2)const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。

    这个是const 引用与普通引用最大的区别。const int &a=2;是合法的。double x=3.14; const int&b=x;也是合法的。

    4.常引用原理

    const 引用的目的是,禁止通过修改引用值来改变被引用的对象。const 引用的初始化特性较为微妙,可通过如下代码说明

    double val = 3.14;const int &ref = val; // int const & int & const ??double & ref2 = val;cout<<ref<<" "<<ref2<<endl;val = 4.14;cout<<ref<<" "<<ref2<<endl;

    上述输出结果为 3 3.14 和 3 4.14。因为 ref 是 const 的,在初始化的过程中已经给定值,不允许修改。而被引用的对象是 val,是非 const 的,所以 val 的修改并未影响 ref 的值,而 ref2 的值发生了相应的改变。

    那么,为什么非 const 的引用不能使用相关类型初始化呢?实际上,const 引用使用相关类型对象初始化时发生了如下过程:

    int temp = val;const int &ref = temp;

    如果 ref 不是 const 的,那么改变 ref 值,修改的是 temp,而不是 val。期望对 ref 的赋值会修改 val 的程序员会发现 val 实际并未修改。

    int i=5;const int & ref = i+5;//此时产生了与表达式等值的无名的临时变量,//此时的引用是对无名的临时变量的引用。故不能更改。cout<<ref<<endl;

    5.const的好处

    1,使用 const 可以避免无意修改数据的编程错误。

    2,使用 const 可以处理 const 和非 const 实参。否则将只能接受非 const 数据。

    3,使用 const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参数不匹配,就会生成临时变量)

    6.引用的本质浅析

    大小与不可再引用

    struct TypeP{char *p;};struct TypeC{char c;};struct TypeR{char& r; //把引用单列出来,不与具体的对象发生关系};int main(){printf("%d %d %d\n",sizeof(TypeP),sizeof(TypeC),sizeof(TypeR));return 0;}

    什么是C++引用

    结论:引用的本质是,是对常指针 type * const p 的再次包装。

    1、const int *pi                                   指向常量的指针。2、int * const pi                                  指针本身是一个常量,称为“指针常量”、“常指针”。3、const int * const pi                       指向常量的指针常量。

    到此,关于“什么是C++引用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: 什么是C++引用

    本文链接: https://lsjlt.com/news/304506.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 什么是C++引用
      这篇文章主要介绍“什么是C++引用”,在日常操作中,相信很多人在什么是C++引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是C++引用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!一、C++ 引用...
      99+
      2023-06-25
    • C++引用的特性是什么
      本文小编为大家详细介绍“C++引用的特性是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++引用的特性是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、 引用概念引用不是新定义一个变量,而是给已存在...
      99+
      2023-06-26
    • C#反向引用构造是什么
      这篇文章主要介绍“C#反向引用构造是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C#反向引用构造是什么”文章能帮助大家解决问题。反向引用构造反向引用允许在同一正则表达式中随后标识以前匹配的子表...
      99+
      2023-06-17
    • C++中的引用类型是什么
      这篇文章主要讲解了“C++中的引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的引用类型是什么”吧!引用,顾名思义是某一个变量或对象的别名,对引用的操作与对其所绑定的变量...
      99+
      2023-06-27
    • C++变量引用的概念是什么
      这篇文章主要介绍“C++变量引用的概念是什么”,在日常操作中,相信很多人在C++变量引用的概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++变量引用的概念是什么”的疑惑有所帮助!接下来,请跟着小编...
      99+
      2023-06-20
    • C++引用的基本概念是什么
      本篇文章给大家分享的是有关C++引用的基本概念是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++编程语言中有很多应用方法和C语言有相同之处。那么作为C语言的升级版本,它...
      99+
      2023-06-17
    • C++11右值引用方法是什么
      本篇内容介绍了“C++11右值引用方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!左值和右值在C++表达式的特性中有一个左值和右值的...
      99+
      2023-06-19
    • c++引用的表示方法是什么
      今天小编给大家分享一下c++引用的表示方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。引用的概念引用 不是新定义一个...
      99+
      2023-06-30
    • C#中使用的索引器是什么
      在C#中,索引器是一种特殊的属性,允许类的实例像数组一样通过索引来访问其元素。索引器在类中定义类似于属性的语法,但使用this关键字...
      99+
      2024-04-03
      C#
    • C语言中什么是左值引用与右值引用
      这篇文章主要介绍“C语言中什么是左值引用与右值引用”,在日常操作中,相信很多人在C语言中什么是左值引用与右值引用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言中什么是左值引用与右值引用”的疑惑有所帮助!...
      99+
      2023-06-16
    • C++引用的本质与意义是什么
      本篇内容介绍了“C++引用的本质与意义是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、引用的意义引用作为变量别名而存在,因此在一些场...
      99+
      2023-06-30
    • C++引用怎么使用及底层原理是什么
      本篇内容介绍了“C++引用怎么使用及底层原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!引用引用不是定义一个新变量,而是给已存在的变...
      99+
      2023-06-30
    • c#索引器的概念是什么
      索引器是一种特殊的属性,允许类的实例像访问数组一样访问对象的元素。索引器可以通过类似于数组访问的语法来访问类中的元素,而不是通过对象...
      99+
      2024-03-05
      c#
    • Java引用与C指针的区别是什么
      Java引用与C指针的区别如下:现象指针在运行时可以改变其所指向的值(地址)即指向其它变量,而引用一旦和某个对象绑定后就不能再改变,总是指向最初的对象。编译程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名以及变量所对应的地...
      99+
      2022-03-17
      Java 引用 C 指针 区别
    • C++中指针与引用的区别是什么
      这篇文章主要介绍了C++中指针与引用的区别是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++中指针与引用的区别是什么文章都会有所收获,下面我们一起来看看吧。1、指针的声明上文中提到,指针和其所指向的变量...
      99+
      2023-06-19
    • C#索引器有什么用
      C#索引器是一种特殊的属性,用于通过索引访问类或结构中的元素。索引器允许将类或结构的实例像数组一样进行访问,通过使用方括号[]来访问...
      99+
      2023-08-29
      C#索引器
    • java中什么是引用
      引用的概念如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。其实GC时主要看这个对象是否有引用指向该对象。按照这种引用的强弱的关系, 从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期...
      99+
      2022-01-25
      java入门 java 引用
    • c#引用类型与值类型的区别是什么
      这篇文章主要讲解了“c#引用类型与值类型的区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“c#引用类型与值类型的区别是什么”吧!解析:CLR支持两种类型:值类型和引用类型。用Jeff...
      99+
      2023-06-17
    • C#基元类型、值类型、引用类型是什么
      这篇文章主要讲解了“C#基元类型、值类型、引用类型是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#基元类型、值类型、引用类型是什么”吧!首先了解下什么是基元类型,基元类型是编译器直接...
      99+
      2023-06-17
    • C语言单引号和双引号的区别是什么
      本文小编为大家详细介绍“C语言单引号和双引号的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言单引号和双引号的区别是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作