c++关于函数的按值传递和按址传递
来源:互联网 发布:安卓4.0淘宝 编辑:程序博客网 时间:2024/06/03 20:35
按址传递中,引用形参是实参变量的一个引用,前边也讲过,引用只是相当于一个别名,系统不会再为其分配存储空间,所以此时,函数中改变形参后,实参值也会相应改变。按值传递只是将实参的值传递给形参变量,参与运算,因为是在不同的存储单元,所以实参值不会受影响。
值传递(按值传递) 1.实参值传递给相应形参 2.实参地址传递给相应形参 比如:数组、指针。
址传递(引用传递)使用别名,共享存储空间(直接访问) 形参为引用参数时,才为按址传递,此时对应实参一般为一个变量。
比如一个为例子:
int func(int *p,int *q) { }
void main()
{
int a,b func(&a,&b);
}
在main函数中,对变量a,b开辟了存储空间,当执行到func函数时,系统会为p,q开辟指针所需的存储空间,只不过p和q分别指向a,b。所以,实参是将地址值传递给了形参,它还是属于按值传递。 若程序改成这样的(引用调用):
int func(int &p,int &q) { }
void main()
{
int a,b func(a,b);
}
在main函数中,对变量a,b开辟了存储空间,当执行到func函数时,系统不会为p,q开辟存储空间,而是采用实参a,b的存储空间。所以,虚实结合过程中,形参部分没有再开辟存储空间。
函数的参数值本身在调用前后的值是保持不变的,在函数体内部所做的任何修改,对函数体外的值没有任何的影响!即便是传递的指针,从本质来说,C++也是做了一次拷贝,将指针复制了一份传递给函数的。
对于传递指针的情况,所修改的,不是该指针参数的值,而是该指针参数所指向的那个空间的值!如下第一题:指针传递:属于按值传递。
- c++关于函数的按值传递和按址传递
- 函数的值传递和址传递
- 关于函数按值传递
- C函数的值传递和地址传递
- C 函数值传递和指针传递的效率问题
- 关于JAVA中参数传递问题的总结(按值传递和引用传递)
- Java:理解Java中函数参数传递的【按值传递】和【按引用传递】
- 关于C语言和Javascript函数参数的传递
- 按值传递和按址传递
- 函数的值传递和引用传递
- 关于值传递和址传递
- 关于C#中按值传递和按引用传递的测试
- Objective-C 函数 “值传递” 和 “引用传递” 和 C
- 关于C++里面的函数中,按值传递与按引用传递的区别
- 关于JavaScript函数的参数按值传递而不是按引用传递的分析
- 关于php按值传递和按引用传递问题
- 关于按值传递和按地址传递
- C关于函数参数的传递
- 2016.06.04 教学妹弄gephi遇到的一些问题
- XTU Binary Search Tree(LIS变形)
- linux网络协议栈内核分析
- 中间件的简要概述
- Tamura纹理特征的matlab实现
- c++关于函数的按值传递和按址传递
- 机器学习-KMeans聚类 K值以及初始类簇中心点的选取
- 第2.7节 类型转换——表达式中float类型的操作数不会自动转化为double类型等
- MarkDown环境的配置-mac
- 【Java】majorityElement
- DexIndexOverflowException: Cannot merge new index 65772 into a non-jumbo instruction
- 跟随屏幕大小自动调整bitmap大小(横竖屏拍摄的照片均可)
- com.android.dex.DexIndexOverflowException
- CentOS7手动释放内存