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

【C++】C++ 引用详解 ⑦ ( 指针的引用 )

; 在 C++ 语言 中 , 使用 引用 时 , C++ 编译器 会自动将 引用 翻译为 一级指针 使用 , 自动 在 一级指针 变量 旁边加上 取地址符号 & 和 取值符号 * ; 指针的引用 就相当于...二级指针 , 其 实现的效果 , 等同于 二级指针 ; C++ 编译器 遇到 指针的引用 时 , 会自动将 引用指针 转为 二级指针 ; 2、引用本质 - 函数间接赋值简化版本 使用函数进行间接赋值...; 如果将 函数 的形参类型 设置为 引用 类型 , 也能达到 间接赋值 的效果 ; 引用 实际上是 把 间接赋值 的三个条件的后两个条件进行了合并 , C++ 编译器遇到引用 , 还是需要将 引用...还原为 C 语言中的 取地址 传入函数 , 在函数内部使用指针访问实参 ; 3、代码示例 - 指针的引用 该 函数 的 参数 是 一级指针的引用 , 使用该参数时 可以当做 一级指针使用 , 其效果...等同于 二级指针 ; 其效果等同于上一篇博客 【C++】C++ 引用详解 ⑥ ( 普通变量 / 一级指针 / 二级指针 做函数参数的作用 ) 中的 int getStudent(Student** stu

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

    C 和 C++ 中的未定义行为

    编译器(实现 C/C++ 标准)可以自由地做任何事情,因为这些是 C 和 C++ 标准未定义的。 ...了解未定义行为的重要性 如果用户开始在 C/C++ 环境中学习并且不清楚未定义行为的概念,那么这可能会在未来带来很多问题,比如调试其他人的代码实际上可能很难追踪未定义错误的根源。...未定义的行为也可能导致安全漏洞,特别是由于未检查数组越界(导致缓冲区溢出攻击)的情况。 未定义行为的优点 C 和 C++ 具有未定义行为,因为它允许编译器避免大量检查。...当程序获得有符号溢出的未定义性质(通常由 C 编译器提供)的优势时,紧密绑定的循环会将程序从 30% 加速到 50%。 ...它还有助于环绕然后编译时检查,如果没有对 C/C++ 编译器中未定义行为的更多了解,这是不可能的。

    4.4K10

    C++的引用

    C++引用的学习: 通常引用第一个作用,人们会想到的是引用的变量的别名;(可以说是直接操作这个变量); 引用的声明: Type + & + name(可以认为是一个常指针) 注意:(1)&是起标识符的作用...;    (2)声明引用时,必须先将其进行初始化; (3)不能建立数组的引用,因为数组是因为由若干个元素组成,所以无法建立一个数组的别名; 引用的应用: (引用作为参数) int swap(int &...2个分号结束时就会指向不明确的内存区; main() {   int c = 10; int a = fun3(c); int &b = fun3(c); } /* 运行结果为...,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。   ...( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。

    94340

    C++的引用

    这两天在C语言的基础上看了C++了一部分,现在看到了除了C语言可以通过值传递和地址传递之外,还可以通过引用的放大进行传递。 其意义就相当于给变量起一个别名。...(2).声明的时候不需初始化。 (3).初始化之后不能别其他变量再次引用。 (4).不能引用数组。(部分编译器可以,但是这种行为会破环稳定性。) (5).不能建立引用的引用。...实践中发现很多这句话的真正解释好像于书上不同,而且书上本身的例题也是违反了定义。...书上的定义: int a=3; int &b=a; int &c=b; 其实我认为这样是对的,真正错误的是以下形式: int a=3; int &b=a; int &&c=b; 问题:通过引用把三个整数从小到大排列...{ if(a>b)change(a,b); if(a>c)change(a,c); if(b>c)change(b,c); } int main() { int m,

    49620

    引用 C C++

    引用 引用是一个别名,它的作用就是作为目标的别名而使用,对这个引用的改动,就是对目标的改动。...定义 例如引用一个整型变量: int a=666; int &ra=a; 引用运算符&与地址操作符使用相同的符号,虽然它们显然是彼此相关的,但它们又是不一样的。...和指针类似,下面的引用定义是等价的: int& ra=a; int &ra=a; int & ra=a; 引用必须在定义的时候就进行初始化。而且必须在申明引用之前其引用的目标已经有申明或定义。...就像我们给张三起绰号叫猪头三一样,我们提到张三很卷和说猪头三很卷是一样的。 引用是不占内存空间的,它就是一个别名而已。 不能引用数组。 那它有什么用处呢? 应用 经常用来传递函数参数。...我们说如果要写一个函数交换两个变量的值,首先可以用指针,此外就是用我们的引用。

    11430

    【C++】C++ 引用详解 ⑩ ( 常量引用案例 )

    在 C++ 语言中 , 常量引用 是 引用类型 的一种 ; 借助 常量引用 , 可以将一个变量引用 作为实参 传递给一个函数形参 , 同时保证该值不会在函数内部被修改 ; 这样既保证了参数传递效率 ,...有保证了数据安全 ; 常量引用 的重要使用场景 : 函数参数传递 函数返回值 对象成员 本篇博客会给出 常量引用 的几种案例 ; 一、常量引用语法 1、语法简介 使用 " 普通变量 " 初始化 " 常量引用...如 : int , string ; variable_name 是 常量引用 的名称 , 调用该常量引用 , 不可修改 value 变量的值 ; value 是 被引用的 变量 , 调用该变量可以修改变量的值...定义一个函数 , 接收结构体类 类型的 常量引用 , 则 结构体常量引用 指向的 对象成员不能被修改 ; 定义的结构体类如下 : // 定义一个结构体类型, 之后使用该类型的常量引用进行测试 struct.../ 导入 C 头文件 #include // 定义一个结构体类型, 之后使用该类型的常量引用进行测试 struct Student { char name[64]; int age

    26730

    C++_引用

    引用 引用的特性: 引用在定义时就要初始化 一个变量可以被多个引用 一个引用只能由一个实体变量,不能引用多个 引用不能降低实体的可执行权限,只能提升或者不变 比如在引用常量的时候,常量只有可读权限,没有写权限...,因此在定义引用的时候必须要用const来定义出常量引用 const int a = 10; int &b = a;//错误 const int &c = a;//正确 int d; int &e =...void Add(int a, int b, int &c) { a += a; b += b; c = a + b; } int main() { int a, b;...return n; } //A的返回值是tem,是n的引用 返回值类型为引用的时候则不是拷贝一个临时变量,返回的是A中局部变量n的引用tem,引用只是别名,不会占空间 int main() { int...tem是n的引用,则通过返回值访问n的时候就是非法访问 所以C++的规定是: 离开函数作用域之后,如果返回值的内存还没有被释放(比如返回值类型是静态变量全局变量之类),则可以使用引用返回,否则必须使用传值返回

    28130

    C++中的引用

    C++中的引用 注意:(写在前面) 0.引用的本质是别名。...3.引用的本质: 引用的本质是一个指针常量。...指针常量的指向不能改变 对于我们,引用只是别名,关于指针、调用、地址等操作都由编译器完成。 4.引用初始化后不能再更改。...int t; t = a; a = b; b = t; }//可以完成交换 int main(){ int a = 1; int b = 2; cout< 2.引用做函数的返回 1.不要返回局部变量的引用...(第一次调用可以输出局部变量的值,因为编译器做了保留;应该是非法操作) 解决方法:在局部变量前加static,存入全局区(全局区数据在程序结束才释放) 2.函数的调用可以作为左值 可以通过等号赋值,赋值到函数返回的引用指向的变量

    1.1K20

    【C++】C++ 引用详解 ⑧ ( 普通引用与常量引用 | 常量引用概念与语法 )

    一、普通引用 1、概念说明 之前的 【C++】C++ 引用详解 ① ~ ⑦ 博客中 , 讲解的都是 普通引用 , 也就是 将 普通变量 赋值给 引用 , 过程如下 : 先定义 普通变量 a , 然后定义...二、常量引用 ---- 1、常量引用引入 与 变量引用 相对的就是 常量引用 ; 通过 普通引用 , 可以修改 变量的值 ; 常量引用 , 是不可修改的 , 声明一个 普通变量 的 常量引用 , 之后不再使用...: error C3892: “b”: 不能给常量赋值 2、常量引用概念与语法 在 C++ 语言中 , " 常量引用 " , 英文名称为 Const Reference , 是一种引用类型 , 另外一种引用就是...常量引用 b 修改 变量 a 的值 , 则会报错 : error C3892: “b”: 不能给常量赋值 错误代码示例 : // 包含 C++ 头文件 #include "iostream" //...d\n", b); // 修改 常量引用 b 的值 // 报错 : error C3892: “b”: 不能给常量赋值 b = 20; // 控制台暂停 , 按任意键继续向后执行 system

    39411

    C++对象成员的引用 | 对象成员引用

    C++通过对象名和成员运算符访问对象中的成员 C++不仅可以在类外引用对象的公用数据成员,还可以调用对象的公用成员函数,但同样必须指出对象名,应该注意所访问的成员是公用的还是私有的,只能访问public...C++通过指向对象的指针访问对象中的成员 C++可以通过指针引用结构体中的成员,用指针访 问对象中的成员的方法与此类似。...;//定义对象time和指针变量point  p=&time; //使point指向对象time  couthout; //输出point指向的对象中的成员hour C++通过对象的引用变量来访问对象中的成员...在C++中,如果为一个对象定义了一个引用变量,它们是共占同一段存储单元的,实际上它们是同一个对象,只是用不同的名字表示而已,因此完全可以通过引用变量来访问对象中的成员。 ...,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++对象成员的引用 | 对象成员引用 更多案例可以go公众号:C语言入门到精通

    2.1K64

    c++ 引用

    目录 2.1引用的基本使用 引用的基本语法 2.2引用注意事项 1,引用必须要初始化 2,引用一旦初始化后,就不可以更改了 2.3 引用作函数的参数 1,值传递 2,地址传递 3,引用传递 2.4引用做函数返回值...1,不要返回局部变量的引用 2,函数的调用可以作为左值 2.5引用的本质 2.6常量引用 ---- 2.1引用的基本使用 引用的基本语法 例:  int &a=b;   2.2引用注意事项 1...,引用必须要初始化 也就是给一个值. 2,引用一旦初始化后,就不可以更改了 不能把别名换成另一个的别名 2.3 引用作函数的参数 1,值传递 其中a和b的值并没有改变....前面的两个形参改变了值. 2,地址传递 3,引用传递 引用传递和地址传递的效果一样 2.4引用做函数返回值 1,不要返回局部变量的引用 不要返回局部变量的引用 2,函数的调用可以作为左值...输出的ref2的值为1000. 2.5引用的本质 引用的本质是指针常量,可以该数值,不可以更改地址指向. int &ret=a     ==   int *const ret=&a 可以改变量不可以改变指向的对象

    35160

    C++引用

    C++重点——引用 定义 特性 常引用 使用场景 做参数 做返回值 传值、传引用效率比较 引用和指针的区别 定义 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间...比如说,你叫A,你的家人给你起小名叫B,你的兄弟姐妹叫你C,恋人叫你D。 其实这些名字都是你自己本人,只不过是不同的称呼而已。...a也可以被改变,是不可以的 int& b = 10;//同上,10是一个不可被修改的常量 const int& c = 10;//这样c就是常量了 int x = 10;//这里的x可以更改 const...引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间。 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的。...在sizeof中含义不同:引用结果为引用类型的大小,但指针始终是地址空间所占字节个数(32位平台下占4个字节)。 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。

    33000

    【C++】引用

    对于引用的概念还是比较好理解的。引用的基本用法: 类型& 引用变量名(对象名) = 引用实体; 我们不妨来举个例子: 如何去应用我们的引用呢?...对于引用的特性而言,我们还是能够很好去理解的。 ---- 对于C++指针和引用而言,是相辅相成的。...,不能用引用返回,因为引用返回的结果是未定义的。...这里的权限缩小指的是原来可读可写后变成只是可读。 关于常引用的用处: 一般用引用做参数时都是用const修饰引用。...---- 7.引用和指针的区别 在语法概念上引用就是一个别名,没有独立空间,和其引用实体共用同一块空间 在底层实现上实际是有空间的,因为引用是按照指针方式来实现的 怎么去理解这句话,我们可以去扒拉一下引用和指针的反汇编代码对比

    57120

    C++ 引用与引用作为函数的参数

    对一个数据建立一个“引用”,他的作用是为一个变量起一个别名。这是C++对C语言的一个重要补充。...b是a的引用,并把a,b的值和它们的地址打印出来。...(有一个例外,引用作为函数参数时,不需要初始化) (2)在声明一个引用后,不能再使之作为另一变量的引用。 (3)不能建立引用数组。...引用的作用: C++加入了在C语言的基础加入了引用机制,那么引用到底有什么用呢?不会只是为了给函数起一个小名吧?显然不是,引用最用要的意义在于作为函数的参数,以扩充函数传递参数的能力。它是如何实现的?...这要从C语言参数传递开始说起: 我们知道,C语言在调用函数时,传参主要有两种形式: (1)变量名作为实参和形参 这种方式传给形参的是变量的值,传递是单向的。

    2.2K40

    【C++】C++ 引用详解 ② ( 引用的意义 | 引用本质分析 | 引用的常量特征 | 引用所占内存空间与指针相同 | 引用在 C++ 编译器实现 | 引用编译时会自动翻译为常量指针 )

    ) { int c = 0; c = *a; *a = *b; *b = c; } 引用示例 : // 交换 a 和 b 的值 // C++ 中推荐的方法 void swap3(int& a,...---- 1、C++ 引用是常量指针 综合上述引用的特征 : 引用具有常量的特征 , 是一个常量 ; 引用和变量都是相同的内存空间的别名 , 其地址都指向内存空间 ; 引用本身也占用内存空间 , 占用大小与指针相同...; 综合上面的三种特点 , C++ 语言编译器 中 , 引用的本质是 : 类型* const 指针名称; 指针 ; 引用在 C++ 语言内部是 常量指针 , 下面 C++ 语言的 " 引用 " 引用类型...& 引用名称 等同于 下面的 C 语言的 " 常量指针 " 指针类型* const 指针名称 C++ 语言中的 引用 , 其在 编译器中的实现 就是 " 常量指针 " , 因此 引用 占用的内存空间与..., C++ 编译器遇到引用 , 还是需要将 引用 还原为 C 语言中的 取地址 传入函数 , 在函数内部使用指针访问实参 ;

    38120

    C++ 链接库顺序导致的符号未定义问题

    符号未定义是链接过程中常见的问题,有时候很明显,有时候却很隐晦,比如链接库的顺序导致的符号未定义问题。...问题描述使用 gcc/g++ 编译一个项目的时候,出现了未定义的符号,符号来源于一个开源库,确认了库的位置,库中符号正常定义,库及其路径都被正确的引用了。...这是一个典型的库链接顺序导致的符号未定义问题了。...链接顺序gcc/g++ 在合并目标文件生成可执行文件的时候会存在库的依赖问题:在命令行中,如果定义一个符号的库出现在引用这个符合的目标文件之前,那么引用就不能被解析,链接会失败。...如果不是相互独立,那么必须对它们进行排序,使得对于每个目标文件的外部引用的符号 s,在命令行中至少有一个 s 的定义是在对 s 的引用之后。

    35700
    领券