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

C++函数接受指针和引用

在C++中,函数可以接受指针和引用作为参数。指针和引用都可以用于传递数据,但它们的实现方式和使用场景略有不同。

指针是一个变量,它存储了另一个变量的内存地址。通过指针,我们可以访问和修改所指向内存地址上的数据。指针的一个优点是它可以被用来传递大量数据,因为只需要传递一个指针而不是整个数据。但是,指针也有一些缺点,比如需要手动管理内存,容易出现空指针或者野指针等问题。

引用是一个别名,它是一个已经存在的变量的另一个名字。引用必须在定义时初始化,并且在整个生命周期中不能被改变。引用可以用来传递数据,但是它不需要手动管理内存,因此相对来说更安全。

在C++函数中,指针和引用都可以用于传递数据。例如:

代码语言:c++
复制
void foo(int* p) {
    // 通过指针修改数据
    *p = 10;
}

void bar(int& r) {
    // 通过引用修改数据
    r = 20;
}

在这个例子中,foo函数接受一个指向int类型的指针作为参数,而bar函数接受一个int类型的引用作为参数。这两个函数都可以用于修改数据,但是它们的实现方式不同。

总的来说,指针和引用都是C++中用于传递数据的有用工具,但是它们的实现方式和使用场景略有不同。如果需要传递大量数据,或者需要手动管理内存,那么指针可能是更好的选择。如果需要传递小量数据,或者希望避免手动管理内存,那么引用可能是更好的选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

详解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++指针引用的区别

3、引用在初始化时引用一个实体后,就不能再引用其他实体,因为其本质是一个指针常量,无法改变指向。而指针可以在任何时候指向任何一个同类型实体。 4、没有NULL引用,但有NULL指针。...6、引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。 7、有多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用引用则由编译器自己处理。...9、引用指针使用起来相对安全。 ---- 前言: 指针引用区别经常在面试中出现, 下面总结出以下区别 1、引用概念上是定义一个变量的别名,而指针是存储一个变量的地址。...2、引用在定义时必须要初始化,但是指针没有要求。 3、引用在初始化时引用一个实体后,就不能再引用其他实体,因为其本质是一个指针常量,无法改变指向。而指针可以在任何时候指向任何一个同类型实体。...6、引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小。 7、有多级指针,但是没有多级引用。 8、访问实体方式不同,指针需要显示解引用引用则由编译器自己处理。

51930

C++ 指针引用的区别

指针是C系语言的一大特色,也在很大程度上体现着C/C++的精髓,一个数据对象的内存地址称为该数据对象的指针。...本质上指针是一个变量,所以它有自己的类型,这个类型决定了它可以指向何种类型的数据对象;之所以使用数据对象这个说法,是因为指针能够代表的远远不止变量,还包括数组,数组元素,结构体,甚至函数。...引用C++对C语言的一个补充,它的作用是为一个变量起一个别名。...换句话说一个引用在声明的时候就必须要初始化(除了作为函数的参数),而指针是没有这个问题的,我们在定义一个指针但是不让它指向任何对象,是完全可以的: //错误,需要初始值 int &b;...这个问题上面的其实是对应的,既然指针在定义的时候可以为空,但是一个为空的指针对实现一个功能是没有用的,为了代码的鲁棒性,我们必须时刻考虑指针为空的情况,这在指针作为函数的参数时尤为常见。

95780

C++: 21---引用指针

(7)”sizeof引用”得到的是所指向的变量(对象)的大小,而”sizeof指针”得到的是指针本身的大小; (8)指针引用的自增(++)运算意义不一样; (9)如果返回动态内存分配的对象或者内存,必须使用指针...,引用可能引起内存泄漏; 指针引用作为函数参数进行传递时的区别 (1)指针作为参数进行传递: #include #include using namespace...为了检查你是否掌握引用指针,到这里那我要提问几个问题: 1.拷贝构造函数的参数为什么必须是类对象的常引用Object(const Object& O1) ?...2.如果作为函数参数,你不希望函数内修改它,那么你选择指针还是引用?...(实际上内存碎片没有那么可怕,对于频繁申请和释放内存的操作我们就必须要重视内存碎片,解决办法就是我们可以使用内存池来来分配对象,内存池我将会在C++进阶的另外一个专题里说),而引用不需要额外分配空间,它只是相当于一个别名而已

69920

C++指针引用及区别

1.变量 首先最重要的,variable的定义,当你申明一个变量的时候,计算机会将指定的一块内存空间变量名进行绑定;这个定义很简单,但其实很抽象,例如:int x = 5; 这是一句最简单的变量赋值语句了...指针内存空间的表示如下: image.png 3.引用 引用(reference)在C++中也是经常被用到,尤其是在作为函数参数的时候,需要在函数内部修改更新函数外部的值的时候。...例如引用的定义如下: int x = 5; int &y = x; 4.指针引用的区别总结 指针有自己的一块空间,而引用只是一个别名; 使用sizeof看一个指针的大小是4,而引用则是被引用对象的大小...; 指针可以被初始化为NULL,而引用必须被初始化且必须是一个已有对象的引用; 作为参数传递时,指针需要被解引用才可以对对象进行操作,而直接对引用的修改都会改变引用所指向的对象; 可以有const指针,...但是没有const引用指针在使用中可以指向其它对象,但是引用只能是一个对象的引用,不能 被改变; 指针可以有多级指针(**p),而引用至于一级; 指针引用使用++运算符的意义不一样; 如果返回动态内存分配的对象或者内存

75110

C++ 语言】引用 ( 引用简介 | 指针常量 | 常量指针 | 常引用 | 引用参数 | 引用 指针 对比 )

引用概念 ---- C++ 对 C 扩充 : 引用 ( Reference ) 概念 , 是 C++ 在 C 的基础上进行的扩充 , 在 C 语言中是没有引用的 ; 引用本质 : 引用的本质就是为一个变量指定一个别名...引用 地址 内存 分析 ---- int a = 0; int &b = a; 变量 与其 引用地址相同 : 对 变量 a 引用 b 取地址操作 , &a 与 &b 的值是相等的 ; ( 引用名称...; 这里注意 , 不同通过引用进行修改 , 但是可以通过变量名称 a 进行修改 ; ⑤ 作用及意义 : 使用 引用数据类型 作为 函数参数 , 如果不需要在 函数中 修改该引用变量的值 ( 指针指向的数据的值...语言中 , 如果要让函数的参数可以将结果返回 , 则必须使用指针作为参数 ; C++ 中的引用参数 : C++ 在 C 语言基础上扩展了 引用 数据类型 , 使用引用可以替代上面的指针作为参数的情况 ,...引用指针 对比 ---- 引用指针的相同点 : 都具有地址的概念 ; ① 指针 : 指针指向内存中的一块空间 , 指针变量的内容是一个内存地址 ; ② 引用 : 引用是变量的别名 , 即某块内存空间的别名

1.2K10

C++C++ 引用详解 ⑦ ( 指针引用 )

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

29320

C++指针引用的区别

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

4.9K82

C++引用指针

专栏放在【C++知识总结】,会持续更新,期待支持 ---- 引用 引用的概念 在C++中,引用的本质其实就是给一个已经存在的变量”起别名“。也就是说,引用与它所引用的对象共用一块空间。...,并且引用返回时,返回的对象可以被修改。同时还可以减少拷贝提高效率。 常引用 我们要记住这样一句话:指针引用在赋值或者初始化时,权限可以被缩小或者保持,但不可进行修改。 这是什么意思呢?...引用在定义时 必须初始化,指针没有要求 引用在初始化时引用一个实体后,就 不能再引用其他实体,而指针可以在任何时候指向任何一个同类型实体(这一点也就意味着 引用并不能实现完全替代指针...,就比如在链表这里,用来指向下一个节点的变量类型,只能是指针) 有多级指针,但是没有多级引用 引用自加即引用的实体增加1,指针自加即指针向后偏移一个类型的大小 引用指针使用起来相对更安全...看法: 因此对于指针引用,我们只能是说引用相较于指针来说,更加容易理解使用,并且也不会存在空引用的问题,但是在一些场景下,引用自身的特点(不能改变指向)也存在着使用限制,此时就得用指针来实现

41230

对比 C++ Python,谈谈指针引用

本文基于 C++ 与 Python,讨论了 Python 中与指针引用相关的一些行为。 ? 1 什么是指针?为什么需要指针?...2 C++中的引用C++ 中,引用具有与指针相似的性质,但更加隐形与严格。C++引用分为以下两种: 2.1 左值引用 左值引用于其初始化阶段绑定到左值,且不存在重新绑定。...右值引用于其初始化阶段绑定到右值,其常用于移动构造函数移动赋值操作。...在这些场合中,移动构造函数移动赋值操作通过右值引用接管被移动对象。 右值引用与本文内容无关,故这里不再详述。...3.2 Python的指针操作 不难发现,虽然 Python 没有引用,但其变量的行为指针的行为具有高度的相似性,这主要体现在以下方面: 在任何情况下(包括赋值、实参传递等)均不存在显式值拷贝,当此种情况发生时

90050

有关 C++ 指针(*)引用(&)区别的小结

众所周知,C 语言存在一个叫做指针的东西,我们可以用指针来指向一个值的内存地址,然后进行内存地址各种操作。...但是在 C++ 中,又多了一个叫做引用的东西,这二者之间存在着细微的差别,通过研读了知乎上的一篇文章(下),对于我之前不太明白的地方,作出了如下小结: 指针可空,引用不可空 指针可以改变指向,也就是说转而指向其他对象...,但是引用却是不可变的 指针本身的意义事实上是内存地址,引用本身的意义是对象本身 也就是说,这个所谓的引用,其实就是 Java 实参中传递的那个对象的地位,只不过这个引用还可以额外更改对象实参的值罢了。...对于 C++ 来说,如果直接传入一个对象,而不是一个对象引用的话,那么 C++ 实际上会调用对象的拷贝构造函数,深拷贝一份对象到方法实参 参考文章 C++指针引用的区别 – 知乎

46230

C++C++ 引用详解 ④ ( 函数返回 静态变量 全局变量 的 引用 指针 )

一、函数返回 静态变量 / 全局变量 的 引用 / 指针 1、函数返回局部变量引用指针无意义 上一篇博客 【C++C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用指针 | 函数内的...“ 局部变量 “ 的引用指针函数返回值无意义 ) 得出如下结论 : 函数的返回值 是 “ 局部变量 “ 的 引用指针 时 , 是无意义的 ; 函数 执行完毕后 , 该 函数对应的 栈内存 会被回收..., 相应的 局部变量 地址 也有没有了意义 , 此时 , 再持有一个 函数返回的 没有意义的 引用 / 指针 , 取出的值是随机无意义的值 ; 2、函数返回静态变量/全局变量的引用指针 函数 返回的是..." 静态变量 " 或 " 全局变量 " 的 引用 / 指针 时 , 是可以的 ; 如果 函数 的 返回值 是 静态变量 或 全局变量 的引用 , 这两种变量 一旦分配内存后 , 在整个程序的生命周期中..., 该内存都不会被回收 , 返回它们的 引用 / 指针 , 可以正常访问 对应 内存中的数据 ; 3、代码示例 - 函数返回静态变量/全局变量的引用指针 在下面的代码中 , fun 函数作为 参照

18130

对比 C++ Python,谈谈指针引用

本文基于 C++ 与 Python,讨论了 Python 中与指针引用相关的一些行为。1 什么是指针?为什么需要指针?...2 C++中的引用C++ 中,引用具有与指针相似的性质,但更加隐形与严格。C++引用分为以下两种:2.1 左值引用左值引用于其初始化阶段绑定到左值,且不存在重新绑定。...,其常用于移动构造函数移动赋值操作。...在这些场合中,移动构造函数移动赋值操作通过右值引用接管被移动对象。右值引用与本文内容无关,故这里不再详述。...3.2 Python的指针操作不难发现,虽然 Python 没有引用,但其变量的行为指针的行为具有高度的相似性,这主要体现在以下方面:在任何情况下(包括赋值、实参传递等)均不存在显式值拷贝,当此种情况发生时

1.3K20

C++】This指针复制构造函数

this指针 在每个成员函数中,都包含一个特殊的指针。 这个指针的名字是固定的,就是this指针。 this指针是指向类对象的指针,它的值是当前被调用的所在对象的地址!...this指针是指向本类对象的指针,它作为参数传递给成员函数 this指针是隐式使用的。由编译器自动实现,我们不必人为的在形参中添加this指针。...因为this表示这个对象的指针,所以*this就表示这个对象了 (*this).调用成员变量/函数this->调用成员变量/函数,是一样的效果!...注意给*this添加括号,因为.运算符的优先级比较高 复制构造函数 复制构造函数普通构造函数有一些相似处的,也没有返回值,类名作为函数名!...所以注意复制构造函数是传引用来实现的!

80720

函数入参使用指针引用的区别

最近做一个工具,在整改函数时需要给一个全局变量赋值 RadixNode *g_pstRootBase 赋值的来源为已定义的结构体:TreeSet treeSet = {0}中的trSet->tNameSet...g_pstRootBase(函数有删减) 传参方式为:setTreeName(&trSet, &g_pstRootBase),内部处理如下 int setTreeName(TreeSet *trSet,...但在调试的时候发现g_pstRootBase并没有赋值成功,即g_pstRootBase仍然是初始值 分析一下才发现&g_pstRootBase的意思是的g_pstRootBase地址,并不是一个真正的指针变量...->tNameSet[i].tName); } } 这样程序就可以正常运行了,即将&trSet->tNameSet[i].tName的地址赋值到地址*tName上 通过以上可以总结出:尽量少用引用作为左值...,如果需要通过函数参数来赋值(出参),最好使用临时指针变量来获取地址,再赋值给需要的变量

73820

c++ 函数指针

函数指针基础: 1. 获取函数的地址 2. 声明一个函数指针 3.使用函数指针来调用函数 获取函数指针函数的地址就是函数名,要将函数作为参数进行传递,必须传递函数名。...声明函数指针 声明指针时,必须指定指针指向的数据类型,同样,声明指向函数指针时,必须指定指针指向的函数类型,这意味着声明应当指定函数的返回类型以及函数的参数列表。...例如: double cal(int); // prototype double (*pf)(int); // 指针pf指向的函数, 输入参数为int,返回值为double pf = cal;...// 指针赋值 如果将指针作为函数的参数传递: void estimate(int lines, double (*pf)(int)); // 函数指针作为参数传递 使用指针调用函数 double...,直接传入函数名 estimate(line_num, cal_m1); estimate(line_num, cal_m2); return 0; } 函数指针数组: 这部分非常有意思: #

44120

C++】自引用this指针的秘密

当调用成员函数a.disp()时,编译系统就会把对象a的起始地址赋值给this指针,于是在成员函数引用数据成员时,就可以通过this指针索引到对象a的数据成员。...为什么叫this指针,而不是引用呢?...首先应该明确的是指针引用在底层的实现是相同的,之所以叫this指针,是因为最开始将C++称作带类的C,而引用则是在C++1.0版才加入使用的,因此叫做this指针。...在C++中,类结构是只有一个区别的:类的成员默认是private,而结构是public。this是类的指针,如果换成结构,那this就是结构的指针了。...this指针是相当于一个类的实例的指针,this是用来操作对象实例的内容的,既然静态成员函数变量都是独立于类的实例对象之外的,它就不能用this指针,也不能操作非静态成员。

79520

C++指针引用的区别

https://blog.csdn.net/sinat_35512245/article/details/53871767  指针引用C++中两个很重要的概念,它们功能看过去很相似,就是都是间接引用某个对象...,那么我们应该在什么时候使用指针,什么时候使用引用呢,下面请允许我慢慢道来: ---- 1.永远不要使用一个指向空值的引用。...一个引用必须始终指向某个对象,所以当你确定使用一个变量指向某个对象时,但是这个对象在某些时间可能指向控制,这时候你就必须把变量声明为指针类型,而不是引用!...当你确定这个变量始终指向某个对象是,这时候你就可以把变量声明为引用类型。 char *str=0; //设置指针为空值 char &s=*str; //让引用指向空值 你应该避免出现上面的错误!...2.因为引用肯定要指向一个对象,所以,在C语言里引用必须被初始化。

66910

C++指针引用详解

因此指针是表示信息在内存中存储地址的一类特殊变量,指针其所指向的变量就像是一个硬币的两面。指针一直都是学习C语言的难点,在C++中又多了一个引用的概念。...1、指针的声明 上文中提到,指针其所指向的变量就像硬币的两面,因此通过取址符号"&"我们可以找到变量的地址,通过解引用符号"*"可以找到地址内存放的变量值。...4、引用的声明与本质 C++中新增了引用作为已定义的变量的别名。引用的最主要用途是作为函数形参,这样函数就可以使用原始数据而不是数据副本,这样听起来似乎与指针没什么区别,我们还是从引用的声明说起。...下面将引用作为函数的参数来进一步说明引用指针的区别: template //定义一个模板函数 void swap(T a, T b){ int temp; temp =...cout << "\na:" << a << "\t\tb:" << b << endl; } 从上述代码中可以看到,值传递引用传递的形参都是一样的,不同的是引用传递时,实参被声明为引用引用的用法与使用值一模一样

63200
领券