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

为什么函数要在传递给它的参数上使用"address of“运算符作为指针?

函数在传递给它的参数上使用"address of"运算符作为指针,是因为指针可以提供更高效的参数传递方式,并且可以实现对参数的修改。

首先,使用指针作为参数可以避免在函数调用时进行参数的复制。当参数较大或者需要频繁传递时,复制参数会消耗大量的时间和内存资源。而使用指针传递参数,只需要传递参数的内存地址,可以减少内存开销和传输时间。

其次,通过指针传递参数可以实现对参数的修改。在函数内部,可以通过指针对传递进来的参数进行读取和修改操作,这样可以直接修改原始数据,而不需要返回值来传递修改后的结果。这在一些需要修改参数值的情况下非常有用,例如排序算法、链表操作等。

此外,使用指针作为参数还可以实现多个函数之间共享同一块内存区域的数据。通过传递指针,多个函数可以访问和修改同一块内存,实现数据共享和传递。

总结起来,使用指针作为参数可以提高程序的效率,减少内存开销,实现对参数的修改和数据共享。在函数调用时,使用"address of"运算符可以获取参数的内存地址,将其传递给函数,以便函数可以直接访问和修改参数的值。

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

相关·内容

指针*和引用&区别使用

引用& 首先,&不是地址运算符,而是类型标识符一种,就像*也不是指针运算符一样。 本篇偏向于&运算符。...这种调用方法我一直搞得晕晕,正好这次一次性根除。这种传递参数方法称为按引用传递。按引用传递允许被调用函数能够访问调用函数变量。这是C++相比C一个超越。...,地址,所以要取地址传给它 //虽然我语文不好,但是都讲到这份上了那应该是可以理解了 return 0; } 如果你意图是让函数使用给它信息,又不想把这些信息进行改动,那么应该使用const。...将引用参数声明为const数据好处有这些: 防止无意中被修改。 使用const参数可以兼容非const传。 将引用用于结构 C++引入引用主要就是为了和结构和类。...const. 4、函数指针 关于为什么使用函数指针,我理解还不是很深刻,毕竟功力不足。

1.1K50

c语言中(int)什么意思_c语言中怎么用int转化char

如果其用于函数参数时,其传递方向为值传递,即只能将实参传递给形,而不能将形传递给实参。 例如:通过这种方式去进行交换两个数是无法达到目的。...---- 引用几点说明 C++中增加引用主要是作为函数参数,进行数据传递功能; 我们知道如果用变量名作为实参,其传递方向是单向,而用引用作为实参其传递方向是双向; 也许你会问,在c语言中不是有指针吗...其实其本质上也是值传递,只不过是将变量地址传给指针,通过指针获取变量值,这样做虽能得到结果,但通过指针运算符去访问有关变量,比较麻烦。...下面分析一下使用引用和使用指针变量作为函数不同(以例子1中swap函数为例): 1、如果使用引用,则不必在swap函数设立指针变量,指针变量要另外开辟内存单元,其内容是地址。...3、使用指针变量时,为了表示指针变量所指向变量,必须使用指针运算符,而使用引用时,引用就代表该变量,不必使用指针运算符; 4、用引用完成工作,用指针也能完成。

4.8K10
  • CC++开发基础——指针与引用

    of value_1: 0048FAE8 data of value_2: 30 address of value_2: 0048FADC 4.函数引用传 函数有两种方式: 1,按值传递:...2,按引用传递: 传样例:funtion_name(int& param2) 传递是引用,实际上传入是指向原始变量一个指针,因此会修改原始变量值。...因此,引用传主要目的有: 为了在调用函数时候,顺带修改原始变量值。 为了在调用函数时候,减少变量副本生成。...5.函数const引用传 很多开发场景经常这样使用函数在按引用传递参数同时,加入了const修饰符。...const引用传主要目的是为了提升代码效率,因为它既不会像按值传递那样,会拷贝一个副本出来,也不会像按引用传递那样,原始变量值会在函数调用期间被任意修改。

    18720

    C语言——指针(三)

    1,一维数组传本质 假如,我们创造一个函数test,企图用test来实现在函数内部计算数组元素个数,如下图: 输出结果: 我们发现:sz2结果并不是我们想要数组元素个数。...为什么同样一段用于计算数组元素个数代码,在函数外部能实现,到了函数内部求数组元素个数就不行了呢? 这是因为: 数组名是数组首元素地址,我们在传时,传递是数组名,传递是首元素地址。...也就是说test函数中sizeof(arr)/sizeof(arr[0])中sizeof(arr)实现其实是计算首元素地址大小,sizeof(arr[0])计算是数组首元素大小,因为我所使用是...总结:本质上,一维数组传传递是数组首元素地址。...)用指针变量和指针运算符 我们可以用指针变量和指针运算符实现访问数组 如下,用指针变量输入输出各数组元素: int main() { int i, a[5], * p = a; //输入: for

    6910

    c++从入门到进阶--引用与常量

    int &&c=move(a);//但是过程是销毁a,a右值由c接管。此后不能使用a,但可以给它赋新右值。...1.函数参数 1)形和实参 形:在定义函数时候,函数名后面小括号中参数 , 格式: 数据类型 变量 如:int x; 形作用域:只能在本函数使用 实参:调用函数时候传递参数 2...②地址传递 地址传递与值传递不同在于,它把实参存储地址传送给形,使得形指针和实参指针指向同一块地址。因此,被调用函数中对形指针所指向地址中内容任何改变都会影响到实参。...③引用传递 引用传递是以引用为参数,则既可以使得对形任何操作都能改变相应数据,又使函数调用方便。引用传递是在形调用前加入引用运算符“&”。...,生存期会延续到整个程序结束但他作用于仍然是局部,因此需要在同一函数两次调用之间保留某些数据时可以使用局部static对象。

    78020

    一篇读懂 C 指针

    同时,在函数声明中,声明数组都会被改写为指向数组初始元素指针。这两个规则完美的契合,让我们在把数组作为实参传递函数时,实际上传递是数组首元素指针副本,符合了函数声明。...# 关于空下标运算符 [] 前面已经介绍过,当数组作为函数时,可以省略下标运算符 [] 中元素个数。除此之外,还有几个特殊情况也允许使用下标运算符 []。...,参数是作为传递,被称为值传递(call by value),也就是说,实参值会被复制调用方函数到形中,然后形就可以像普通局部变量一样使用了。...# 多维数组作为参数传递 正如前面介绍那样,当数组被用作函数时,数组声明会自动被解释为指针声明。...从前面的例子可以看到,双指针主要出现在以下两种场景: 动态数组动态数组,即在多级数据结构中使用动态内存分配 通过参数返回指针,需要在函数内部修改指针本身 双指针多层间接引用可能让代码显得复杂难懂,但只要理解为什么要这样做

    11710

    C++运算符重载详解

    可重载运算符种类 并不是所有C++中运算符都可以支持重载,我们也不能创建一个新运算符出来(比如Σ)。有的运算符只能作为类成员函数被重载,而有的运算符则只能当做普通函数使用。...为了区分前自增和后自增,系统规定对前缀自增运算符函数上添加一个int类型参数作为区分标志。...} }; 从上面的代码中可以看出: 类型转换运算符重载是不需要指定返回类型,同时也不需要指定其他,而只需要指定转换类型作为运算符即可。...我们可以通过函数运算符来将一个对象当做普通函数使用,这个意思就是说我们可以在某些接收函数地址作为参数方法中传递一个对象,只要这个类实现函数运算符并且其中参数签名和接收函数参数签名一致即可。...*运算符来实现取值操作,也就是得到这个指针所指向对象;对一个对象使用&运算符来得到对象指针地址;对于一个指针对象我们可以使用->运算符来访问里面的数据成员。

    1.4K30

    函数指针指针函数学习小结

    例如: char (*a[3])(int); a到底被声明为什么东东?指针?数组?还是函数? 分析时,从a 最接近(按运算符优先级)处开始。...即数组a元素是指向函数指针。 指向是什么类型函数?这很明显,是入为int、返回值为char类型函数。 至此解析完毕。 按上述方法,再复杂也可以一步步解析出来。...这个特殊指针指向一个返回整型值函数指针声明必须和它指向函数声明保持一致。 指针名和指针运算符外面的括号改变了默认运算符优先级。...但是有些程序员倾向于使用第一种格式,因为它明确指出是通过指针而非函数名来调用函数。...=0)             if(**fpp<0) break;             else (*fpp)++;         } 首先用一个数组地址初始化指针fp,然后把该指针地址作为实参传递函数

    1.1K20

    第七节(指针

    : 如果编写程序中要用到指针,千万不要在赋值表达式语句左侧使用未初始化指针。...然后调用largest()函数,并将数组(指向该数组指针和数组大小)传递给它。该函数在数组中找出最大值并将其返回主调函数。...数组名是指向该数组首元素指针。通过指针运算特性,可以很方便地使用指针来访问数组元素。实际上,数组下标表示法就是指针表示法特殊形式。 本次还介绍了通过传递指向数组指针来将数组作为参数传递函数。...函数一旦知道数组地址和数组元素个数,便可使用指针表示法或下标表示法访问数组元素。 问答题 1:为什么在C语言中,指针很重要? 通过指针能更好地控制数据。...&data[0]和data 11:如果要给函数传递一个数组,有哪两种方式让函数知道已到达数组末尾? 一种方法是,把数组长度作为参数传递函数

    19640

    C语言中函数基本知识

    或是我们刚接触C语言时候用到 printf, scanf, 这些都是c语言为我们提供。在我们使用某一库函数时候,需要在程序中嵌入(#include) 该函数所需要头文件。...常量是不能被更改量。 2:如果你要在函数中,要改变主调函数中某变量值,那么就要把地址传递给形, 如果不需要改变,直接传递拷贝即可。...结合1,2两点可以理解为啥我们把数组名字作为实参传递函数时候可以改变原数组值。...其实是没,两者可以说是一样,因为址传递传递是地址,地址这个值,由形里面的指针变量存放着。...根据要注意点中,第二个要点,我想在被动用函数中就改变主调函数中参数值,那么我就需要把地址传递进去,也就是进行址传递,那么我函数定义就需要借助指针为什么会如此呢?

    87620

    C语言基础知识梳理总结

    实型常量类型:C编译系统将实型常量作为双精度来处理。   ...(2) 实参可以是常量、变量或者表达式;有时传递时地址;   (3) 在被定义中,形必须指定类型;   (4) 实参与形类型应相同或赋值兼容;   (5) C语言规定,实参变量对形参变量数据传递是...“值传递”,即单向传递,只有实参传递给形,而不能由形传递给实参。...h文件是头文件所用后缀。   3、如果使用用户自己定义函数,而且该函数使用函数在同一个文件中,一般还应该在主调函数中对被调用函数做声明。   ...NULL,但是p所指内存可能是非法,编译可能会显示内存访问错误,那么做出如下修改,给它一块合法内存。

    76110

    C++之类和对象

    指向其他对象) 3.this 指针本质上是“成员函数一个形,当对象调用成员函数时,将对象地址作为实参传递给 this 形,所以对象中不存储this 指针; 4.this 指针是“成员函数”...第一个隐含指针,一般情况由编译器通过建立“成员函数函数栈帧时压栈传递,不需要用户主动传递。...解答:this 指针作为函数,存在于函数栈帧中,而函数栈帧在栈区上开辟空间,所以 this 指针存在于栈区上;不过VS这个编译器对 this 指针进行了优化,使用 ecx 寄存器保存 this 指针...解答:this指针作为参数传递时是可以为空,但是如果成员函数用到了this指针,可能会造成空指针解引用。 3.下面两段代码运行结果分别是什么? //下面两段代码编译运行结果是?...而this指针作为参数传递时是允许为空,在成员函数里也没有对this指针进行解引用。 代码2运行崩溃,因为在成员函数中对this指针进行解引用了,而this指针是一个空指针

    1.2K00

    C语言入门

    (5)函数和实参是两个不同变量,所以,一般情况下形改变不影响实参值,除非在函数参数传递类型为引用传递(地址传递)。...8、数组作为函数参数传递 数组名为数组首地址,所以整个数组作为函数参数传递实际上是引用传递传递是地址,形改变会影响到实参。...,使其指向函数funmin c=funp(a,b); //通过函数指针funp调用函数funmin return 0; } 5.4、使用函数指针作为函数参数(回调函数函数指针一个重要用途是把函数地址作为参数传递到其他函数...回调函数:通过函数指针调用函数。如果你把函数指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向函数时,我们就称这是回调函数。...使用三级指针r给变量a赋值 10.4、双重指针作为函数 一般来说函数无法改变实参,除非形指针类型

    85430

    指针02

    结果是10 匪夷所思 明明把a传进去了 为什么没有用??因为main函数a和addnumber函数a不是一个a 打印出两个a 证明事实确实是如此 为什么会不一样??...传递过程相当于在函数内部重新定义与实参同类型变量,再把实参值赋给该变量 规则: C++语言中参数传递本质都是值传递(引用传递是C++中概念) 形只在调用时分配内存,调用结束时释放内存,形被销毁...参数传递是单向,只能由实参传给形。 形只是实参一份拷贝,形改变对实参本身没有影响。...注意:如果指针或者地址作为实参传入函数指针指向内容或者地址存放数据是可以改变,但是指针值和地址本身是不会改变。...swap函数也就是说 int* x = p1; int* y = p2; 由此就能知道swap里面交换是p1和p2指针值地址 也就是拷贝a b地址给形 然后通过x y这两个指针交换 a

    13210

    C语言函数参数是如何传递

    因为函数参数在传递时候,都是传原数据副本,也就是说,swap内部使用a和b只是最初始a和b一个副本而已,所以无论在swap函数内部对a和b做任何改变,都不会影响初始a和b值。...为什么又有传值,又有传指针 看到这里,不知道你是否会疑惑,为什么函数传递参数时候,一会是传值,一会是传指针呢?为什么指针就能改变参数值呢?实际上,C语言里,参数传递都是值传递!...我们再通过图来理解前面为什么指针就可以交换a,b值: 传指针 从图中可以看出,虽然传递函数是指向a和b指针副本,但是它副本同样也是指向a和b,因此虽然不能改变指针指向,但是能改变参数a...运行结果: address of p is (nil) 这是为什么呢?...c语言1232_副本_副本.jpg 可配合下面的图进行理解: 总结 本文总结如下: 函数都是原数据“副本”,因此在函数内无法改变原数据 函数中参数都是传值,传指针本质上也是传值 如果想要改变入内容

    4.1K11

    C语言中指针详解

    指针变量作为函数参数 普通变量作为函数参数传递时是按值传递,实参与形不共享内存。指针变量作为函数参数时是地址传递,共享内存,“双向传递”。...指针变量值是可以改变,字符指针变量也不例外;而数组名代表数组首地址,是一个常量,而常量是不能改变。 10. 指针函数 指针变量既可以作为函数,也可以作为函数实参。...指针变量作为函数参数,形和实参之间数据传递方式本质上是值传递,只是在调用函数传递内容是地址,这样使得形参变量和实参变量指向同一个变量。...若被调函数中有对形所指变量内存改变,实际上是改变了实参所指变量内容。 数组名作为函数时,接收实参数组首地址;数组名作为函数实参时,将数组首地址传递给形参数组。...引入指向数组指针变量后,数组及指向数组指针变量作为函数参数时,可有四种等价形式: 1. 形、实参均为数组名; 2. 形、实参均为指针变量; 3.

    2.4K20

    【笔记】《C++Primer》—— 第一部分:C++基础

    可对数组进行sizeof推断可以返回整个数组大小,但是当这个数组被作为参数传递后这个效果会消失,数组会被转为指针,只能返回指针本身大小了 逗号运算符比较少用到,它优先级是所有运算符中最低。...what函数来得到异常信息,详细回到5.6可以查看 6 函数 建议函数声明与定义要分开来写,因为函数可以声明多次但只能定义一次,声明建议写在头文件中 函数可以是引用类型,此时传入实参称为引用传递或传引用调用...,传引用形是实参别名,要比C风格指针更加有效实用 函数初始化形是需要进行拷贝,这个过程比较低效,所以建议使用引用来避免拷贝 若需要避免函数对引用参数修改,则使用常量引用来保证安全性,定义为常量引用是更好习惯...传递数组引用时,注意由于引用必须要有实体,所以需要保证输入数组大小与形指定大小相同 main函数可以带有两个参数,argc和argv,其中argc是命令行调用此程序时附带传入参数数量,argv...这是由于argv第一个元素固定为程序调用时所输入程序名,最后一个元素固定为0 有几种方法来传入可变数量实参:一种是当数量未知而类型固定时,使用C11标准库initializer_list来作为

    1.5K40

    精选 30 个 C++ 面试题(含解析)

    8.将“引用”作为函数参数有哪些特点? (1)传递引用给函数传递指针效果是一样。...(2)使用引用传递函数参数,在内存中并没有产生实参副本,它是直接对实参操作;而使用一般变量传递函数参数,当发生函数调用时,需要给形分配存储单元,形参变量是实参变量副本;如果传递是对象,还将调用拷贝构造函数...(3)使用指针作为函数参数虽然也能达到与使用引用效果,但是,在被调函数中同样要给形分配存储单元,且需要重复使用"*指针变量名"形式进行运算,这很容易产生错误且程序阅读性较差;另一方面,在主调函数调用点处...注意当数组作为函数参数进行传递时,该数组自动退化为同类型指针。...= '\0' ); return address; } 25.为什么标准头文件都有类似以下结构?

    1.6K30

    打造坚实基础:C语言结构体、联合体和枚举

    可以通过 x 直接访问结构体成员,例如 x.a、x.b 和 x.c 适用场景:这种方式在需要定义一次性使用简单结构时非常有用,比如作为函数参数或在特定代码块内部定义一些临时数据结构。...Stu *ptr=&s1; 访问结构体成员:使用结构体指针访问结构体成员时,需要使用箭头运算符 (->) 而不是点运算符 (.) ptr->age=23; printf("%d",ptr->age)...= NULL) { ptr->age = 20; ptr->height = 1.78; } 函数和结构体指针:结构体指针函数参数中非常有用,特别是当你需要在函数内部修改传递结构体内容时...缺点:如果结构体很大,会增加内存使用传递成本。 指针传递 在这种方式中,传递是结构体地址。函数内部通过指针访问和修改结构体成员。...如果你想通过指针传递结构体,但又不希望函数修改结构体内容,可以使用常量指针 void print2(const struct S* ps) { printf("%d\n", ps->num); } 结构体实现位段

    13010
    领券