46.值传递、指针传递、引用传递的区别和效率

发布时间 2023-07-03 21:46:23作者: CodeMagicianT

46.值传递、指针传递、引用传递的区别和效率

1.值传递:有一个实参向函数所属的栈拷贝数据的过程,如果值传递的对象是类对象或是大的结构体对象,将耗费一定的时间和空间。(传值)

2.指针传递:同样有一个实参向函数所属的栈拷贝数据的过程,但拷贝的数据是一个固定为4字节(32位操作系统)的地址。(传值,传递的是地址值)

3.引用传递:同样有上述的数据拷贝过程,但其是针对地址的,相当于为该数据所在的地址起了一个别名。(传地址)

4.效率上讲,指针传递和引用传递比值传递效率高。一般主张使用引用传递,代码逻辑上更加紧凑、清晰

指针传递和引用传递是两种不同的参数传递方式,它们有以下主要区别:

1.参数表示方式:在指针传递中,参数以地址的方式传递给函数;而在引用传递中,参数以变量的引用(别名)的方式传递给函数

2.参数修改:在指针传递中,函数内部可以通过指针修改实际参数的值;而在引用传递中,函数内部对参数的修改实际上就是对实际参数的修改

3.内存开销:指针传递需要在栈上分配内存存储指针,而引用传递不需要额外的内存开销

4.语法形式:指针传递的参数以*开头,而引用传递的参数直接以类型名开头

5.是否可变:引用没有const,指针有const和非const,const的指针不可变