首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c++指针引用区别

目录 前言: 1、引用概念上是定义一个变量别名,而指针是存储一个变量地址。 2、引用在定义时必须要初始化,但是指针没有要求。...6、引用自加即引用实体增加1,指针自加即指针向后偏移一个类型大小。 7、多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用引用则由编译器自己处理。...9、引用指针使用起来相对安全。 ---- 前言: 指针引用区别经常在面试中出现, 下面总结出以下区别 1、引用概念上是定义一个变量别名,而指针是存储一个变量地址。...4、没有NULL引用,但有NULL指针。 5、在sizeof中含义不同:引用结果为引用类型大小,但指针始终是空地址空间所占字节个数(32位平台下占用4个字节,64位占用8字节)。...6、引用自加即引用实体增加1,指针自加即指针向后偏移一个类型大小。 7、多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用引用则由编译器自己处理。

51130

详解c++指针指针指针引用

展示一下使用指针指针指针引用修改传递给方法指针,以便更好使用它。...(这里说指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针复本传递给了方法,也可以说传递指针指针值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改指针copy而不是指针本身,原来指针还保留着原来 值。...换句话说,我们修改是main()方法里 *pn指针 **p: 两次解引用是指向main()方法里*pn内容 指针引用 再看一下指针引用代码 int m_value = 1; void func...看一下func(int *&p)方法 p:  是指针引用,main()方法里 *pn *p:是main()方法里pn指向内容。

1.3K60
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 指针引用区别

指针是C系语言一大特色,也在很大程度上体现着C/C++精髓,一个数据对象内存地址称为该数据对象指针。...引用C++对C语言一个补充,它作用是为一个变量起一个别名。...那么从指针引用区别的角度考虑二者特性的话,下面几点: (1)非空区别: 在任何情况下都不能使用指向空值引用, 一个引用必须总是指向某些对象。...这个问题上面的其实是对应,既然指针在定义时候可以为空,但是一个为空指针对实现一个功能是没有用,为了代码鲁棒性,我们必须时刻考虑指针为空情况,这在指针作为函数参数时尤为常见。...由于引用声明初始化总是在一起,所以不可能让一个对象引用指向另一个,这完全没有道理,假设a引用是c,那么在执行int &c=b;就重定义了,如果执行c = b;,那么只是把b值赋值给c,也就是

94480

C++指针引用区别

C++中,指针引用经常用于函数参数传递,然而,指针传递参数引用传递参数是本质上不同指针传递参数本质上是 值传递方式,它所传递是一个地址值。...,而指针不是 (引用指针多了类型检查) 这几天看重温了下《高质量C/C++编程指南》 《More Effective C++》对于里面的引用指针觉得写得很精辟,同时在网上也找了些别人写总结,引用过来大家分享下...虽然使用引用指针都可以间接访问另一个值,但他们之间两个重要区别: 引用总是指向某个对象,定义引用没有初始化是错误。...引用是操作受限了指针(仅容许取内容操作)。 ★《高质量C/C++编程指南》6.6     引用C++概念,初学者容易把引用指针混淆一起。...引用主要功能是传递函数参数返回值。C++语言中,函数参数返回值传递方式三种:值传递、指针传递引用传递。     以下是“值传递”示例程序。

4.8K82

C++ 引用计数技术及智能指针简单实现

具体而言,复制对象时,副本原对象都指向同一存储区域,如果通过一个副本改变其所指值,则通过另一对象访问值也会改变.所不同是,智能指针能够对内存进行进行自动管理,避免出现悬垂指针等情况。...引用计数是这样一个技巧,它允许多个相同值对象共享这个值实现。引用计数使用常有两个目的: 简化跟踪堆中(也即C++中new出来对象过程。...5.智能指针改进一 虽然我们SmartPtr类称为智能指针,但它目前并不能像真正指针那样->、*等操作符,为了使它看起来更像一个指针,我们来为它重载这些操作符。...目前这个智能指针智能用于管理Point类基础对象,如果此时定义了个矩阵基础对象类,那不是还得重新写一个属于矩阵类智能指针?...但是矩阵类智能指针类设计思想Point类一样啊,就不能借用?答案当然是能,那就是使用模板技术。为了使我们智能指针适用于更多基础对象类,我们必要把智能指针类通过模板来实现。

2.1K41

C++学习笔记-指针引用注意事项

2 &表示一个实体地址,此符号可用来对指针变量初始化赋值 如: int count = 18; int * iptr = &count; int * ip; ip = &count; 3 *除了可以用来定义指针...指针只有指向具体实体才有意义 也就是:指针忘记赋值比整型变量忘记赋值要危险多 6 指针虽然是一个地址,但却是类型限制 不能把float变量地址赋值给int型指针 但是可以对指针进行强制转换...如: float f = 34.5; int * ip = reinterpret_cast(&f); cout<<*ip<<endl; 但是专家都不推荐这样做!...8 常量指针是指向常量指针 指针常量是指针值不能修改指针 我想这两个应该很少用到吧 二:引用 1 引用在这里是个名词 从逻辑上理解引用其实就是个别名 引用定义时必须初始化,这是它与指针根本不同地方...: 引用值虽然可能发生变化但其地址是不变 可以通过&r查看该引用地址 与指针对比: 指针可以改变关联实体,引用只是一个实体别名 指针可以操作多个实体,引用只能操纵一个实体 引用指针更安全些,

25420

C++引用指针以及const常量限定符,能说一二

最近后台收到问,能不能分享更多一些方面的干货呢、比如深度学习其他方面、简单易懂知识,甚至一些琐碎杂乱计算机基础知识点?...指针引用相比: 指针本身是一个对象,存放某个对象地址,允许对指针赋值拷贝,在其生命周期内可先后指向不同对象; 指针无须定义时一定赋确定值,可用nullptr,0,NULL(头文件cstdlib...(严格说,引用不是对象,不存在常量引用一说法,人们常常喜欢用它时,不过方便描述罢) 引用与const: 例1 const int a=24; const int &b=a;//此时引用引用对应对象都是常量...例3 int a=24; const int &b=a;//可以 const int &c=8;//可以 const int &d=b*2;//可以 int &e=b*2;//e是一个非常量引用,...顶层const底层const: 指针作为一个对象,可指向另外一个对象,这两个对象是否常量是独立。 顶层const:指针本身是const。更一般地,当任意一个对象是常量时,可称为顶层const。

82820

C++核心准则R.37: 不要使用从破损智能指针​获取指针引用

R.37: Do not pass a pointer or reference obtained from an aliased smart pointer R.37: 不要使用从破损智能指针获取指针引用...违反本规则是引用计数丢失和发生悬空指针第一号理由。函数更应该沿着调用链向下传递原始指针引用。你应该在调用树最顶端,从可以保证对象存在智能指针获得原始指针引用。...要做到这点,你需要获取一个智能指针局部拷贝,通过它可以在函数调用树执行期间将对象牢牢地锁定。...(简单)如果函数调用时使用了一个从非局部智能指针变量(Unique_pointer or Shared_pointer)获取指针或者引用,报警。智能指针是局部变量但是可能是别名时也报警。...如果智能指针是一个Shared_pointer,建议获取一个智能指针局部拷贝然后从该拷贝获取指针引用

50030

C++引用指针到底什么区别?

也就是说传递引用之后,我们在函数当中修改了参数值,对参数本身一样起作用。那么问题来了,引用指针什么区别呢?...那么引用指针什么区别呢? 其实很简单,指针是附加属性,是一种绑定关系。引用则就是一个账号别名,就好比我们用手机号绑定账号,我们可以用手机号登陆操作账号。...四 我们进一步理解一下,指针引用本身是两个东西,两个完全不同概念。 指针是一个额外类型,它可以指向某一个变量地址。而引用则单纯就是同一个变量,只不过换了个名字。...可能有人会觉得奇怪,int a = 3; int &b = a;这样int a = b = 3;什么区别?难道不都是等于3?...如果它对一个指针操作,输出就是指针这个东西大小,和它指向内容没有关系。不论它指向什么,返回都是8。而引用本体是一样,自然返回就是本身大小。

23220

C++核心准则C.166:​ 重载单目运算符&只能用于智能指针引用

C.166: Overload unary & only as part of a system of smart pointers and references C.166: 重载单目运算符&只能用于智能指针引用...Many parts of the C++ semantics assumes its default meaning. 取地址运算符&是C++基本要素,C++语义很多地方为它设定了默认含义。...如果你要"招惹"&运算符,一定要确保它结果类型->,[],* . 相匹配。注意 . 运算符现在不能被重载,因此不可能实现完美系统。...注意std::addressof()总是返回一个内置类型指针。 Enforcement(实施建议) Tricky....CppCoreGuidelines.md#c166-overload-unary--only-as-part-of-a-system-of-smart-pointers-and-references ---- 觉得本文帮助

45230

从实现装饰者模式中思考C++指针引用选择

从实现装饰者模式中思考C++指针引用选择 最近在看设计模式内容,偶然间手痒就写了一个“装饰者”模式一个实例。该实例来源于风雪涟漪博客,我对它做了简化。...实例目的是希望通过装饰器类对已有的蛋糕类进行装饰补充,于是按照装饰者模式设计结构,类似图1设计结构。 ? 图1 装饰者模式 蛋糕类装饰器类都继承于一个公共基类,该基类声明了一些公共接口。...当然,使用引用或许更合理,因为按照平常经验,很多使用C++指针地方都可以用引用代替,有人甚至建议多使用引用少使用指针(当然我也承认C++引用也有很多好处~)。...其实并不是,佛家说:“今日之果皆来自昨日之因”,一切一切都是由于我们使用了本以为毫无悬念引用导致!如果使用指针就不可能发生拷贝构造函数冲突问题,也不会导致编译器优化问题!...回视本文刚开始举例子该文主题,或许我们应该清楚有时候的确要好好区分一下指针引用差别了,当然本文也是从一个实践例子中去发现挖掘这一点。

1.1K100

cc++区别(二)const引用、一级指针、二级指针结合

一、const一级指针结合 一级指针模型 一级指针两种表达方式,p*p。所以const与一级指针两种结合方式。 //在c++语法规则中,const修饰距离它最近类型。...主要是担心代码会修改被const修饰常量值,如果有这样风险,编译器不会通过代码编译。 修改方式两种: 1.直接修改 直接修改比较容易判断,看常量是否作左值。...二、const引用结合 定义引用时,由于&变量名紧挨着。...return 0; } 从汇编角度看看常引用为什么是可行,往往越底层东西越能带来透彻理解。...三、const二级指针结合 二级指针模型 二级指针三种表达方式,即q、*q **q,所以const二级指针最基本结合方式三种。

41920

引用对象变量对象间关系_白小白女朋友

你是直接操纵元素,还是用某种基于特殊语法间接表示(例如C/C++指针)来操作对象。所有这些在 Java 里都得到了简化,一切都被视为对象。因此,我们可采用一种统一语法。...首先,没有“对象实例”这一说法,只有类实例,而类实例,指就是类对象,说白了就是对象。 但是还是很多人这样叫,那怎么理解对象实例呢?...>1个对象 } 试想一下这样代码会出现啥情况?...是这个对象地址值,也就是c里面所谓指针。...最后再梳理一下 引用类型变量 就 相当于 电脑上快捷方式; 对象就相当于 你 磁盘里面 安装游戏,它 实实在在 占用你空间内存; 而变量 只是快捷方式 说白了基本数据类型变量就像是直接放在柜子里东西

70020

C++智能指针unique_ptr、shared_ptrweak_ptr

C++智能指针是一种特殊指针类型,它能够自动管理内存资源,避免常见内存泄漏多次释放等问题。C++11引入了三种主要智能指针:unique_ptr、shared_ptrweak_ptr。...①unique_ptr 在C++中,unique_ptr是一个智能指针(smart pointer)类模板,用于管理动态分配内存资源,它提供了自动释放内存功能。...②shared_ptr 在C++中,shared_ptr是一个智能指针(smart pointer)类模板,用于管理动态分配内存资源。...③weak_ptr 在 C++ 中,weak_ptr 是一种智能指针(smart pointer),用于解决循环引用问题。...当这两个对象生命周期延长,超过了程序实际需要它们时间时,就会造成循环引用内存泄露。 为了解决循环引用问题,C++中引入了弱引用指针weak_ptr。

38220

一起长锈:4 默认不可变变量绑定与引用(从Java与C++转Rust之旅)

赵可菲:“嘿,为啥Rust要设计变量绑定这样机制呢?啥好处不?” 贾克强:“Rust变量绑定跟Java或C++赋值不一样,其实主要是体现了更深语言设计原则变量行为差别。”...“基本用法:在两种语言中,解引用都是一种间接访问操作变量方式。如果你一个指向数据指针引用,你可以使用解引用来读取或改变这些数据。”...4.3.2.3 内存生命周期管理 “C++:程序员需要手动管理内存(尽管现代 C++ 提供了智能指针等工具来帮助管理内存)。指针生命周期管理完全是程序员责任。”...标准库支持广泛,包括对智能指针等现代C++引用机制支持。 安全性 编译时检查引用安全,防止数据竞争悬垂引用。 运行时通过垃圾回收异常处理提供引用安全,但不涉及编译时检查。...在C++中,程序员需要手动管理内存(尽管现代C++提供了像智能指针这样工具来帮助内存管理)。指针生命周期管理完全是程序员责任。 JavaC++引用赋值语义与Rust有所不同。

12543

C++C++ 类中 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

一、全局函数 与 成员函数 相互转化 1、成员函数转为全局函数 - 多了一个参数 C++ 编译器 , 在编译阶段会将 C++ 成员函数 转为 全局函数 , 转换时 , 会 增加一个参数到参数列表开始为止...就是 左操作数 , 在成员函数中 , 通过 this 指针访问对象本身成员 ; 在全局函数中 , 实现两个 Student 类相加 , 接收两个 Student 引用类型参数 , 引用相当于一级指针...; // 全局函数中 , 将两个 Student 对象相加 // 引用 等同于 一级指针 , Student 引用用法与 Student 对象用法相同 // 全局函数 转为 成员函数 , 少了一个参数...return s; } 详细代码 , 参考最后完整代码示例 ; 二、参构造函数设置默认参数值 ---- 为 Student 类定义了参构造函数 , 则其默认无参构造函数 , 就不会生成..., 就是返回自身对象变量 // this 是指针 , *this 是指针指向 自身对象 return *this; } 返回 引用 , 就是返回自身对象 ; this 是指针 , *this

15820

RUST 语言特性之所有权

作为一名 C/C++ 程序员,C/C++ 语言中指针是使用得最爽,几乎无所不能,各种奇技淫巧也层出不穷。但 C/C++ 语言中最折磨人也是指针,伴随着开发过程就是指针导致内存问题做斗争。...也许是意识到指针巨大杀伤力,现代语言中都不再提供指针特性,改为引用托管指针。...其实在 Java 语言中,new 一个对象后得到是一个指向对象东西,本质上也是一个“指针”,但这个“指针”不可以随意修改,访问受到严格控制, C/C++ 语言中指针有着本质区别。...在我理解中,所有权就相当于 C++智能指针智能指针持有对象,智能指针结束生命周期,释放所持有的对象。...但智能指针存在循环引用问题,虽然为此又引出了强指针指针来解耦循环引用,但这种解耦依赖于程序员,并没有在语言层面上保证不会循环引用

73660

使用 C++ 智能指针遇到

使用 C++ 智能指针遇到坑 阅读收益 智能指针目的就是代替原始指针,那么问题来了,原始指针都可以用智能指针代替?...不能 智能指针 unique_ptr、shared_ptr weak_ptr三个,那么问题来了 一个不能代替全部?...unique_ptr默认不能copy,如果一次使用 禁止拷class 虽然move实现拷贝,unique_ptr原来指针为null,core风险。解决办法:实现智能指针深度拷贝。...但是在实际使用过程中,很多人都会有这样问题: 不知道三种智能指针具体使用场景 无脑只使用 shared_ptr 认为应该禁用 raw pointer(裸指针,即 Widget * 这种形式),全部使用智能指针...对象所有权 在编程语言中,对堆对象内存管理是一个麻烦又复杂问题。一不小心就会带来问题(堆上数据通过指针来访问。) C++里多个变量指向同一块内存导致重复释放。

2.4K50

C++智能指针

如此做,指针指针,辅助类对象与被引用对象关系如下图所示: image.png 辅助类将引用计数与智能指针类指向对象封装在一起,引用计数记录多少个智能指针指向同一对象。...目前这个智能指针智能用于管理Point类基础对象,如果此时定义了个矩阵基础对象类,那不是还得重新写一个属于矩阵类智能指针?但是矩阵类智能指针类设计思想Point类一样啊,就不能借用?...要避免这种问题,方法多种: (1)定义陚值运算符,使之执行深复制。这样两个指针将指向不同对象,其中一个对象是另一个对象副本,缺点是浪费空间,所以智能指针都未采用此方案。...这样情况包括: (1.1)一个指针数组,并使用一些辅助指针来标示特定元素,如最大元素最小元素; (1.2)两个对象都包含指向第三个对象指针; (1.3)STL容器包含指针。...C++中文版(第三版).2011:61-77 [3]C++智能指针简单剖析 [4]shared_ptr基于引用计数智能指针实现 [5] C++智能指针设计使用 [6]C++11智能指针

3.4K30

智能指针究竟在考什么|Effective Modern C++

可以看出,在没有move拷贝之前, c++ 通过修改拷贝构造函数, 参数非const 达到这样结果。..."not null\n" : "null\n"); return 0; } 引用计数方式: std::move不move任何东西 std::move真正返回是一个右值引用(rvalue reference...: 将基类指针引用安全地转换成派生类指针引用, (1) 必须是类指针或者引用 ,int类型不行 (3) base类必须有虚函数 int main() { for( int n = 0...右值是无法获取地址?如果可以 左值什么区别【作业】 总结 个人理解:智能指针重点 不是引用计数,引用计数需要额外空间存储。 应该背后值语义,就是如何拷贝一个对象。...但是为了普通区分 引入move拷贝概念。 就像一个从一个房间走人到另外一个房间。 人是唯一。 还有普通对象在深度拷贝时候,存在如果类是继承关系。 智能指针是无法解决这个问题

55930
领券