传值传参和引用传参
来源:互联网 发布:软件板块拓尔思 编辑:程序博客网 时间:2024/04/29 17:49
引用方式传参,引用相当于是外部变量的别名,实际操作的就是该变量,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。而传值方式传参,实际上是复制了一个外部变量的副本进入函数中,在函数内操作的为该副本,对该变量的修改并不会实际修改函数外的该变量。注意,此处未考虑传入的参数为指针的情况,如果传值方式传入的是指针,那么如果单纯修改指针,那么在跳出函数后,该指针指向不受影响,但是如果修改的是指针指向的值,那么外部指针所指向的内容也是相应修改了的。因为以指针为参数进行传值,也是在函数内部复制了一个指针的副本,因而在内部修改指针本身即修改其副本并不影响外部的指针,但是两个指针都是指向同一个内存空间的,因而如果在函数内部修改了指针指向的内容,外部指针指向的内容也就相应改变了。
#include <iostream>using namespace std;//测试如果引用进入函数后进行修改,跳出函数后变量是否修改;void ChangeRef(int& ref);//测试以传值方式进入函数进行修改,跳出函数后变量是否修改void ChangeNotRef(int ref);//测试以指针为参数传入函数,修改指针指向,是否影响外部指针指向void ChangePtr(int* ptr);//测试在函数中修改指针指向的内容,是否影响外部指针指向内容void ChangePtrVal(int* ptr);int main(int argc, char* argv){ int Ref = 0; cout << "传入引用之前的值为:" << Ref << endl; ChangeRef(Ref); cout << "在函数内修改引用后,跳出函数的值为:" << Ref << endl; ChangeNotRef(Ref); cout << "通过传值方式在函数内修改后,跳出函数的值为:" << Ref << endl; int* ptr = &Ref; cout << "传入函数前的指针指向:" << ptr << endl; ChangePtr(ptr); cout << "传值方式传入函数跳出后的指针指向:" << ptr << endl; cout << "传入前指针指向的值为:" << *ptr << endl; ChangePtrVal(ptr); cout << "从函数中出来后指针指向的值为:" << *ptr << endl;}void ChangeRef(int& ref){ ref++; cout << "引用内修改后的值为:" << ref << endl;}void ChangeNotRef(int ref){ ref++; cout << "通过传值方式在函数内修改后的值为:" << ref << endl;}void ChangePtr(int* ptr){ ptr++; cout << "函数内修改后的指针指向:" << ptr << endl;}void ChangePtrVal(int* ptr){ (*ptr)++; cout << "函数内修改后指针指向的值:" << *ptr << endl;}
输出为:
0 0
- 传值传参和引用传参
- 值传参和引用传参
- 引用传参和指针传参
- JAVA值传参和引用传参
- 引用传参和static修饰符
- 传参和引用的一点启示
- 值类型和引用类型,形参和实参,传值和传引用
- 真正搞懂传值引用和传指针引用
- C++ 学习之函数传参1:引用传参和非引用传参
- Java函数传参 Java引用和C++引用的区别
- 传值和传引用
- 传值传地址和传引用
- PHP传值和引用
- Java中传值和传引用
- 方法,传真和传引用
- Java中传值和传引用
- 引用和const引用
- 引用和const引用
- CentOS6 上OpenWRT交叉编译
- Scala学习第六弹 条件表达式
- uva1025-《算法入门经典》
- JavaScript编写异或函数
- Android官方的sdk,ndk,build-tools,android-x, tools,adt...下载地址
- 传值传参和引用传参
- PHP常量PHP_SAPI与函数php_sapi_name()简介,PHP运行环境检测
- 蚂蚁碰撞概率计算
- Flink流计算编程--如何实现基于KEY/VALUE的List State
- MySql 数据文件默认位置&导入数据文件
- 自然语言处理
- SQL常用命令查询地址
- Fragment:关于Avoid non-default constructors in fragments的错误
- HDU1106-排序