精华内容
下载资源
问答
  • 【C语言】指针和引用区别

    千次阅读 2019-06-11 11:40:34
    指针和引用区别 1.指针是一个实体,而引用是一个别名;在汇编上,引用的底层是以指针的方式实现的,定义一个引用变量,相当于就是定义了一个指针,然后把引用内存的地址写到这个指针里面,当通过引用变量修改它...

    指针和引用的区别

        1.指针是一个实体,而引用是一个别名;在汇编上,引用的底层是以指针的方式实现的,定义一个引用变量,相当于就是定义了一个指针,然后把引用内存的地址写到这个指针里面,当通过引用变量修改它所引用的内存时,它先访问了指针里面的地址,然后在这个地址的内存里面对值进行修改

        2.指针可以不初始化,通过赋值可以指向任意同类型的内存;但是引用必须初始化,而且引用一经引用一块内存,再也不能引用其它内存了,即引用不能被改变

        3.在进行 sizeof 操作时, sizeof 指针在 32 位系统下永远是 4 个字节,而 sizeof 引用计算的 是它所引用内存的大小

        4.引用是内存单元的别名,不是数值的别名。如int &a=10;//error,底层是指向10的地址,引用不能引用不能取地址的数据

        5.引用只能使用引用变量所引用的数据,例如b是a的别名,b只能使用a的数据

       

     

     

     

    展开全文
  • 指针和引用区别

    万次阅读 多人点赞 2019-05-15 13:20:05
    C++将指针暴露给了 用户(程序员),而javaC#等语言则将指针隐蔽起来了。 1.2使用指针的有点必要性: 指针能够有效的表示数据结构 能动态分配内存,实现内存的自由管理 能方便的使用字符串 指针直接与...

    参考文章

    思维导图

    在这里插入图片描述

    1.为什么使用指针

    • 1.1每一个编程语言都使用指针
      C++将指针暴露给了 用户(程序员),而java和C#等语言则将指针隐蔽起来了。
    • 1.2使用指针的有点和必要性:
      • 指针能够有效的表示数据结构
      • 能动态分配内存,实现内存的自由管理
      • 能方便的使用字符串
      • 指针直接与数据的存储地址有关。比如:值传递不如地址传递高效,因为值传递先从实参的地址中取值,再赋值给形参代入函数计算。而指针则把形参的地址直接指向实参地址,使用时直接取出数据,效率提高。(这里形参的改变会影响实参的值)

    2.指针和引用的区别

    • 2.1本质:
      引用是别名,指针是地址
    • 2.2具体:
      • 2.2.1 从现象上看:
        指针在运行时可以改变所指向的值,而引用一旦与某个对象绑定后就不再改变。意思是:指针可以被重新赋值以指向另一个对象,但是引用则总是在初始化时被指定的对象,以后不能改变,但是指向的内容可以改变。(下面是这个规则的理解)
    	string str1 = "a";
    	string str3 = "b";
    	string &str2 = str1;
    	str2 = str3;
    

    在这里插入图片描述
    在这里插入图片描述
    我们看到了“str2 = str3”之后,str2指向的还是str1的地址,str2映射的地址没有发生改变,只是指向的内容发生了改变。 如果用&str2作为左值,编译器会报错,提示“表达式必须是可以修改的值”,这也就是而引用一旦与某个对象绑定后就不再改变的意思,也就是str2是str1的别名,已经映射了str1的地址了,它不能再映射其他的地址,他不能作为其他变量的别名了。

    • 2.2.2内存分配:
      程序为指针变量分配区域,而不为引用分配内存区域。因为引用生命时必须初始化,从而指向一个已经存在的对象,引用不能为空值
    • 2.2.3编译:
      程序在编译时分别将指针和引用添加到符号表上,符号表上记录的是变量名及变量所对应地址。指针变量在符号表上对应的地址值为指针变量的地址值,而引用在符号表上对应的地址值为引用对象的地址值。符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的值可以改),而引用对象不能改。这是使用指针不安全而使用引用安全的主要原因。从某种意义上来说引用可以被认为是不能改变的指针
    • 2.2.4级数:
      从理论上来说,对于指针没有级数限制,但是引用只有一级。
      int** p1; // 合法。指向指针的指针
      int*& p2; // 合法。指向指针的引用
      int&* p3; // 非法。指向引用的指针是非法的
      int&& p4; // 非法。指向引用的引用是非法的
    • 2.2.5在效率上:
      其实两者的效率是一致的,因为在底层中,指针和引用的参数都指向同一个地址。
      在高级编程语言中,因为用*传参可能会指向空的地址或者错误的地址,所以要时时判断参数是否为空,导致降低效率。
      而用&传参数,则参数不可能为空或者错误地址,这也算稍微提升了一些效率。
    展开全文
  • 面试题——谈谈指针和引用区别

    千次阅读 2019-07-03 11:58:34
    一、指针和引用的定义性质区别: (1) 指针指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已...

    一、指针和引用的定义和性质区别:

    (1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如:

    int a=1;int *p=&a;
    
    int a=1;int &b=a;
    

    上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。

    而下面两句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。

    (2) 指针的值可以为空,但是引用的值不能为NULL,并且引用在定义的时候必须初始化;

    (3) 指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变了,从一而终。

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

    (5)指针和引用的自增(++)运算意义不一样;

    二、相同点

    都是地址的概念;

    指针指向一块内存,它的内容是所指内存的地址;

    引用是某块内存的别名。

    三、联系

    1、对一般应用而言,把引用理解为指针,不会犯严重语义错误。引用是操作受限了的指针(仅容许取内容操作)。

    引用是C++中的概念,初学者容易把引用和指针混淆一起。以下程序中,n是m的一个引用(reference),m 是被引用物(referent)。

    int m;
    int &n = m;
    

    n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作。

    引用的一些规则如下:

    (1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
    (2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
    (3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。

    以下示例程序中,k 被初始化为i 的引用。语句k = j 是把k 的值改变成为6,由于k 是i 的引用,所以i 的值也变成了6.

    int i = 5;
    int j = 6;
    int &k = i;
    k = j; // k 和i 的值都变成了6
    

    上面的程序看起来象在玩文字游戏,没有体现出引用的价值。引用的主要功能是传递函数的参数和返回值。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递。

    “引用传递”的性质像“指针传递”,而书写方式像“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?

    答案是“用适当的工具做恰如其分的工作”。

    指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险。

    就象一把刀,它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?

    如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针”,以免发生意外。比如说,某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利。

    2.总的来说,在以下情况下你应该使用指针:

    一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),

    二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。

    还有一种情况,就是当你重载某个操作符时,你应该使用引用。

    尽可能使用引用,不得已时使用指针。

    当你不需要“重新指向”时,引用一般优先于指针被选用。这通常意味着引用用于类的公有接口时更有用。引用出现的典型场合是对象的表面,而指针用于对象内部。

    文章参考来源:https://blog.csdn.net/qnavy123/article/details/82183586

    展开全文
  • 一篇文章牢记C/C++指针和引用区别

    千次阅读 多人点赞 2020-07-25 14:07:21
    指针有自己的一块空间,而引用只是一个别名;(本质) 使用sizeof看一个指针的大小是4(32位下),而引用则是被引用对象的大小; (大小) 指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 ...指针和.
    1. 指针有自己的一块空间,而引用只是一个别名;(本质
    2. 使用sizeof看一个指针的大小是4(32位下),而引用则是被引用对象的大小; (大小
    3. 指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象 的引用;(初始化
    4. 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引 用的修改都会改变引用所指向的对象;
    5. 可以有const指针,但是没有const引用;
    6. 指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变;
    7. 指针可以有多级指针(**p),而引用至于一级;
    8. 指针和引用使用++运算符的意义不一样;
    9. 如果返回动态内存分配的对象或者内存,必须使用指针,引用可能引起内存泄露。
    展开全文
  • 主要介绍了C++中引用传递与指针传递的区别(面试常见),需要的朋友可以参考下
  • C++中的引用和指针 ★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。 ★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. ...
  • C++的引用和C语言的指针有以下区别: (1)引用必须初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用较比指针更加安全; (2)引用指向一块特定的内存,不能被更改。不存在...
  • int n; int &m = n; 在C++中,多了一个C语言没有的引用声明符&,如上,m就是n的引用,简单的说m就是n的...假如在一个函数中动态申请内存空间,用指针和引用作形参会得到不同的结果,如下面的例子:   void fun(int
  • 指针与数组和引用区别和联系

    千次阅读 2018-09-01 10:46:47
    概念: 指针指针是内存中的地址 例: 指针就是你家在一栋楼里的门牌号 ...引用:一个变量的别名 指针的作用: 指针作为参数: 例: void swap(int*p,int*q) { int tmp=*p; *p=*q; ...
  • c++之指针和引用作为函数参数传递时的区别

    千次阅读 多人点赞 2020-06-03 09:15:57
    之前写过c++之值传递、引用传递、指针传递,今天再单独区分一下指针和引用作为函数参数传递时的区别。 本文参考浅谈C++中指针和引用区别 一、指针作为函数参数传递时 1、类似于值传递,传入函数的指针只是原指针的...
  • 一份总结“指向指针指针和引用指针变量区别”的精华笔记,很多人对于**p与 *&p的差别不是很清楚,相信这个笔记可以解决你的疑惑。
  • Charles 对于“引用只能在定义时被初始化一次”开始不理解:int i = 10; int j = 11; int & a = i;cout ; cout ; a = j;//注意,这里不是被使用j的别名,是i的值被赋值成j. cout ; cout << "i =
  • go语言值、指针和引用类型

    千次阅读 2019-06-11 11:43:28
    Go语言的指针与CC++ 中的指针类似,无论是语法上还是语意上。但是Go语言的指针不支持指针运算,这样就消除了在CC++ 程序中一类潜在的bug。Go语言也不用free()函数或者delete操作符,因为Go语言有垃圾回收器,...
  • 一、引用引用的定义:引用是给另外一个变量其别名,所以引用不会...通过这样的定义,pt2pt1表示同一对象,需要特别注意的是,引用并不产生对象的副本,仅仅是对象的同义词,因此当执行下面的语句之后 pt1.of...
  • c++ 引用传参和指针传参的区别

    千次阅读 2019-05-26 19:32:47
    指针从本质上讲是一个变量,变量的值是另一个变量的地址,指针在逻辑上是独立的,它可以被改变的,包括指针变量的值(所指向的地址)和指针变量的值对应的内存中的数据(所指向地址中所存放的数据)。 引用从本质上...
  • 1.指针和引用的定义性质区别: (1)指针指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。如: int a=1;...
  • 主要介绍了C/C++ 数组和指针引用区别的相关资料,这里从汇编的角度来分析他们之间的区别,需要的朋友可以参考下
  • C++中指针和引用区别

    万次阅读 多人点赞 2017-04-18 09:47:50
    指针和引用区别
  • 详细介绍了C++中通过指针和通过引用传递参数的区别
  • 一、传指针指针引用区别 相同点: 都是地址的概念。指针指向一块内存,它的内容是所指内存的地址;而引用则是某块内存的别名。 不同点: 1. 指针是一个实体,而引用仅是个别名 2. 引用只能在定义时被初始...
  • 指针和引用作为形参的区别

    千次阅读 2018-08-02 15:11:09
    引用做函数的形参:在函数内部,对这个形参做任何操作,相当于对实参做相同的操作。  指针做函数的形参:在函数内部,只有在这个形参的值没有变化的情况下,对其所指向的内容做任何操作,才相当于对实参所指向内容...
  • C++指针和引用区别

    千次阅读 2018-08-20 10:13:59
    指针和引用区别 1.引用不可以为空,但指针可以为空。定义一个引用的时候,必须初始化; 2.引用一旦初始化后不可以再改变指向(但可以改变所指向对象的内容),而指针可以改变指向。 3.引用的大小是所指向的变量的...
  • cpp-指针和引用区别

    千次阅读 2018-10-15 11:41:12
    c++有几种复合类型,其中最为熟悉的两种就是:引用和指针   引用:为对象起了另外一个名字:int a=10, int &amp;b=a; b=15;相当于a=15. 这时b完全代表a,引用并不是对象,只是为一个已经存在的对象起的另外...
  • 引用和指针区别

    千次阅读 多人点赞 2020-08-08 17:02:45
    引用和指针区别:
  • 引用指针有什么区别

    万次阅读 多人点赞 2019-06-25 15:41:42
    引用指针有什么区别指针和引用都是地址的概念,指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。 程序为指针变量分配内存区域,而不为引用分配内存区域。 指针使用时要在前加 * ,引用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 658,581
精华内容 263,432
关键字:

指针和引用的区别