精华内容
下载资源
问答
  • 1.引用必须在定义时就要初始化,而指针不需要。 例如: int a=0; int &b=a; int *ptr;...2.引用不占用内存空间,它只是变量的别名而已,而指针是占用内存空间的。在C++中没有取引用地址的说法

    1.引用必须在定义时就要初始化,而指针不需要。

    例如:

    int a=0;
    int &b=a;
    int *ptr;

    2.引用不占用内存空间,它只是变量的别名而已,而指针是占用内存空间的。在C++中没有取引用地址的说法。

     

    展开全文
  • c++中的引用与指针

    2021-05-14 11:29:33
    c++中的引用与指针 指针 指针是c++最明显的特点,它的出现为语言的编写和内存的规划提供了很多的便利优化。然而在我们学习c++的过程中,指针也是最难以被大部分人理解的内容,它难以上手,难以掌握难以理解。 ...

    c++中的引用与指针

    指针:

    指针是c++最明显的特点,它的出现为语言的编写和内存的规划提供了很多的便利与优化。然而在我们学习c++的过程中,指针也是最难以被大部分人理解的内容,它难以上手,难以掌握难以理解。

    如何理解指针:

    试想一下,当你需要找一个人,你知道他的家在哪,你也在之前和他约定好,让他在他家里等你,那么找这个人的下一步很显而易见就应当是去这个人家里找他。

    在c++与内存中,这个人就是我们要访问的数据,我们把他放到我们想要他在的目标内存块中,并且把这块内存块的地址记下来,指针就是对他地址的记录。

    如果我们想找到这个人,就可以用指针去访问来得到地址,或者换句话说,指针变量所存储的是地址,其他变量存储的往往是变量或者内容,这是指针的特点。


    引用:

    引用是c++在发展中对指针的优化,更难理解了。但好处是弄明白后很好用

    试想这样一个事情,我们还是用刚才的例子,我们找人,知道地址。这时我们发现,这个人的家的地址有两种说法,我们可以说他住在xx大学,也可以说他住在xx街道的xx号。这两个地址看起来不同,但实际上说的是一个地方。引用是实现的效果就是这样,为一个人提供两个访问的方式,比如:

    int a=10;
    int &b=a;
    b++;
    cout<<b;
    

    这时候代码中的b是引用,简单理解来说可以被认为是a的“别名”,是a的另一种说法,对b的操作就是对a的操作,对a的操作就是对b的操作

    引用的实质

    引用的实质是一个指针常量,这个常量不可变并且会被写入全局变量。编译器会将上面 &的引用 自动转化为 int * const b=&a;并在之后每次检测到 b 时都转化为 *b;

    并且由于引用是一个指针常量,所以他不可以被更改。

    我们可以认为是对指针的一种优化,他让我们可以更高效的编写程序。

    展开全文
  • C++引用与指针

    2020-02-23 14:43:35
    为什么 C++ 有指针了还要引用? 因为加入引用是为了支持operator overloading。这里有一个假设,如果没有引用,那么,用指针来operator overloading操作。 A operator +(const A *a, const A *_a); 那么使用的时候,...

    为什么 C++ 有指针了还要引用?

    因为加入引用是为了支持operator overloading。这里有一个假设,如果没有引用,那么,用指针来operator overloading操作。
    A operator +(const A *a, const A *_a);
    那么使用的时候,&a + &b,这样看起来是不是很难受。
    而引入引用的概念,既可以满足overload operator,也不失重载value和pointer的灵活性。而且引用还带来一个指针无法替代的特性: 引用临时对象。因为引用必须在定义的时候就赋值,以后无法更改。

    发布于 2015-08-24・著作权归作者

    绯村剑心

    1
    我觉得根本是为了解决函数返回值不能是左值的问题 有了引用后可以对表达式赋值

    C++为啥要有引用?
    因为运算符重载。
    C++为啥要有异常?
    因为没办法返回一个“空引用”。

    因为引用是编译器层的东西, 编译完后并不会占用真正的内存. 而指针是个数据, 是要单独占用内存保存的.

    更新一下:
    说"引用编译玩后不会占内存",这种说法不太严谨. 应该说引用是个概念, 概念本身不占内存. 而实现引用的通常方式为保存其引用对象的指针,而此指针会占内存,但不是引用占的内存了.
    就像类本身不占内存, 但对象会占内存一样,

    本来之父也和你一样想的,有指针就够了,一样能实现相应的功能,没必要再多一个语法设施。但后来为了加运算符重载,没有引用的话,前自增的语义就难以说明清楚,这是引入引用概念的历史背景。后来你可以发现,线性容器所重载的下标运算符,迭代器和智能指针所重载的间接访问运算符,输入流和输出流的链式调用,这一切都是离不开引用语义的。
    抛开运算符重载的历史因素,引用在大多数场合下完全可以视作指针的语法糖——在底层的汇编的层面讲他们是一样实现的。不过有了引用以后,确实写代码可以方便很多。比如最常见的手法就是利用引用免掉一阶的指针。在 C 里面,你要在函数中修改一个一级指针,形参里得声明成二级指针,但在 C++ 里形参声明成一级指针的引用就可以了。别看只是降了一阶,但人类的思维理解高维的概念很困难,问题降一阶以后考虑问题就可以轻松很多。
    有了引用以后,代码也变得简练。以前在 C 里,如果要设计一个函数处理大对象,则不得不以指针做参数,那就不得不声明临时变量去存储中间结果。
    Matrix a, b, c;

    getMatrixA(&a);
    getMatrixB(&b);
    addMatrix(&a, &b, &c);
    printMatrix(&c);
    而在 C++ 里,则完全不需要考虑这些,完全可以以引用当参数,代码又清晰,又不用担心会拷贝而带来效率瓶颈。
    print(addMatrix(getMatrixA(), getMatrixB()));

    引用是很早就有的 c++ 概念,可以视为指针的语法糖。
    右值引用是c++11 里面为了移动语义提出的,也就是和这种类型: T&&。
    移动语义就是为了提高运行时效率,相对于拷贝和赋值提出了一种更高效的可选的实现策略,这样就能通过 std::move 明确指示编译器执行资源数据的移动,而不是拷贝。这样就提高了效率。也就是说,如果只有引用,那么编译器“并不敢”擅自使用移动来完成拷贝,赋值这个动作(移动意味着源对象会变成一个“空壳子“),因为它不知道用户是否将来还会再用到这个对象。
    引入 T&& 的意思就是明确的告诉编译器,我这个对象后续就不用了,你放心的移动吧!
    此外就是 std::forward 是为了让模板可以正确推断成右值引用而使用移动语义优先。
    至于什么是左值,右值,就到 Value categories 去查询吧。

    展开全文
  • 引用就是某一变量(目标)的一个别名,对引用的操作对变量直接操作完全一样。 区分&的作用: int *p=&a;// &此处是取地址符 a & b //按位运算(相同位的两个数字都为1,则为1;若有一个不为1,则为0) a&&b ...

    引用:

    引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。


    区分&的作用:

    int *p=&a;// &此处是取地址符

    a & b          //按位与运算(相同位的两个数字都为1,则为1;若有一个不为1,则为0)

    a&&b        //逻辑与运算

    int  &a=b;//引用(a为b的别名)

    引用的声明方法:类型标识符 &引用名=目标变量名;

    说明:

    1)b为目标原名称,a为目标引用名。类型标识符就是目标原名称的类型。

    2)声明引用时,必须对其进行初始化。

    3)声明一个引用,不是定义一个新变量,只是一个变量的别名,因此它不占存储单元,所以对对引用求地址就是对目标变量求地址。(&a=&b)

    4)不能建立引用的数组,但是可以建立数组的引用。

    int &a[3]={1,2,3};   //错误,试图声明一个引用数组。

    原因:数组是一个元素的集合,而引用不是一个新变量,不占内存,没法给他分配空间,所以不能声明和定义引用数组。

    数组的引用:例如

    int b[3];  

    int(&a)[3]=b;


    引用的两个用途:作为函数参数以及从函数中返回左值

    1)在c中,函数的参数不具备返回值得作用,一般用指针来实现返回值。但是引用可实现传递可变参数。

    2)当大型对象被传递时,使用引用参数可是参数传递效率提高。因为引用并不产生对象的复制,使程序的时空复杂度都减小。

    指针:

    指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中的寄存器(Register)。

    指针一般出现在比较近机器语言的语言,如汇编语言或C语言。面向对象语言如Java一般避免用指针,而是引用。


    引用和指针的区别:

    1)指针有空指针这一说法,它可以被重新复制,而引用没有空引用(null reference)这一说法,它总是指向最初的对象。

    2)指针是一个实体,他有自己的地址空间,而引用只是一个别名,不占内存,没法给他分配空间。

    3)“sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;

    4)指针和引用的自增(++)运算意义不同。

    5)指针是一个存放变量地址的变量,引用时一个变量的别名。当编译的的时候,引用和指针都被存入符号表。符号表一旦生成就不能被改变,但是,指针变量在符号表中存放的是指针变量的地址,而不是他指向的变量的地址,因此指针可以改变它指向的对象。但是,引用在符号表中对应的是目标对象的地址,因此引用对象不能改变。

    相同点:

    他们都是地址的概念。





























     
















    展开全文
  • 和 *指针的算术运算指针数组指针与数组的关系指针与结构体的关系指针与函数的关系引用引用与指针的联系与区别指针传递和引用传递参考 C++ 指针引用详解 C++ 是在 C 的基础上发展来的,C++ 除了有 C 语言的指针外...
  • 指针-对于一个类型T,T*就是指向T的指针类型,也即一个T*类型的变量能够保存一个T对象的地址,而类型T是可以加一些限定词的,如const、volatile等等。...2、指针引用区别 ●首先,引用不可以为空,...
  • 指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变其指向的对象(指针变量中的值可以改),而引用对象则不能修改。 ...
  • C++引用指针区别

    千次阅读 2020-07-10 14:51:40
    作者:RainMan ...来源:知乎 著作权归作者所有。...那么引用的本质是什么,它与指针又有什么关系呢? 1.引用的底层实现方式 引用被称为变量的别名,它不能脱离被引用对象独立存在,这是在高级语言层面的概念和理.
  • 指针变量就是存放指针的变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量)指针的定义:例如整型指针: int *p;p是一个指向int类型数据的指针变量。里面...
  • 引用传递和指针传递有何区别This article consists of the description of both references [in C++] and pointers [preferred in C/C++]. The description would finally lead to a conclusion which will draw a ...
  • C++中引用指针指针引用指针指针

    万次阅读 多人点赞 2013-02-22 10:35:25
    定义一个指针的三种写法都对:1....1、指针传递和引用传递 在C语言中,如果要实现在函数内部改变外部变量的值的话,就应该传递这个变量的指针。如果要通过指针访问变量,必须使用指针运算符“*”。这样在
  • 条款一:指针与引用区别  指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在...
  • 引用与指针的比较

    2009-03-22 08:44:00
    一、引用与指针基本概念的异同 1、引用必须依附一个已存在对象,所以在定义一个引用变量时,必须用一个已存在的对象,对其进行初始化。而指针变量则可以独立存在。例如:class CBase{...} CBase oB1;CBase &rB1=oB...
  • 用参数传递来 辨析 指针与引用区别 在谭浩强错误的c程序设计中的最大错误就是: 传参有两种方式,传址和传值!!!!, 这句话我想说: 完全错,大错特错,错上加错,误人子弟。 指针也是一个变量,指针也值的 ...
  • 2. 引用与指针区别 2.1 2.2 2.3 2.4 引用是C++引入的重要机制(C语言没有引用),它使原来在C中必须用指针来实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么...
  • 引用、常指针、常引用指针常量、引用常量

    千次阅读 多人点赞 2017-08-29 14:19:03
    引用的本质以及const的位置在语法和作用上的区别
  • 对于初学C语言的朋友,指针会是学习的一大难点,而指针也是C语言的一大特点。刚接触指针你觉得非常的麻烦,但是不要去害怕学习指针。如果学习C语言都对指针的知识都不去认真了解,就很难说过去。本文先对指针的定义...
  • C++ 指针与引用区别

    2021-04-12 23:39:26
    1. 指针可以改变其绑定的变量,也可以不用初始化(不建议这么做,有危险) ...2. 指针变量有自己的实际地址和所占空间的大小,x86 上一般是 32 位,但是引用是和它绑定的变量共享一个地址。 int x = 0; i
  • Java中没有指针说法,Java中的引用就类似于C++的指针, Java的引用是栈区的一个变量, 如果引用的是基本数据类型,那它存储着就是栈区的一块内存,(因为普通基本数据类型由栈区管,long、int、short、byte、float...
  • 使用引用后的别名其实跟使用原变量是一样的,这样看来确实是跟指针有点相似,指针是一个指向变量地址的实体存在,指针本身也是存在的,指针也有自己的地址,但是引用就不一样,引用本身并没有独立再开辟出一个新的...
  • 指针引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法。 1.指针引用的定义和性质区别: (1)指针指针是一个变量,只不过这个变量存储的是一个地址,...
  • C++中指针与引用区别 原创算法集市2020-05-15 07:30:00 初学C++时,很容易把指针引用的用法混在一起,下面通过一些示例来说明指针引用两者之间的差别。 1、两者的定义和性质不同 指针是一个变量,存储的是...
  • c++ 指针与引用区别

    2013-01-31 12:26:00
    指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“.”),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先...
  • c++引用指针

    2019-08-03 18:46:36
    引用:给对象起另一个名字,引用必须初始化 一般在初始化的时候,初始值会被拷贝到新建的对象中,定义引用时,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用,绑定后无法令引用再绑定到另一个对象,...
  • 指针引用的理解? 指针引用区别
  • 指针说法

    2018-05-15 18:51:00
    而且要记住:在表达式中,指针和数组是可以互换的,因为他们在编译器里的最终形式都是指针,并且都可以进行取下标操作。就像加法一样 3+5 和 5+3 一样的 所以: a[5] 5[a] 是一样的。 ...
  • 句柄、引用指针与对象

    千次阅读 2016-04-15 09:24:17
    (2)引用是对象的别名,其实质就是功能受限但是安全性更高的指针; (3)句柄是指针指针,句柄实际上是一个数据,是一个Long (整长型)的数据。句柄是一个标识符,是拿来标识对象或者项目的,它就象我们的姓名一样。 ...
  • 指针与引用

    2011-03-02 16:33:00
    java传递是引用的拷贝,既不是引用本身,更不是...变量,所以一定不要将指针与指针变量搞混淆了。指针仅仅是一个地址值,而指针变量就是存放指针(也就是地址的变量) 指针的定义: 例如整型指针: int *p;p是

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,120
精华内容 11,648
关键字:

引用与指针的区别的说法