C++三种参数传递方式:从交换函数看值、指针与引用的区别
本篇文章将通过一个简单的交换函数示例详细介绍C中的三种参数传递方式值传递、指针传递和引用传递。我们会分析每种方式的特点以及它们在函数调用中对实参的影响。代码预览#include iostream using namespace std; // 1. 值传递 void Swap01(int a, int b) { int temp a; a b; b temp; } // 2. 指针传递 void Swap02(int* a, int* b) { int temp *a; *a *b; *b temp; } // 3. 引用传递 void Swap03(int a, int b) { int temp a; a b; b temp; } int main() { int a 10; int b 20; Swap01(a, b); cout Swap01 a a , b b endl; Swap02(a, b); cout Swap02 a a , b b endl; Swap03(a, b); cout Swap03 a a , b b endl; return 0; }三种传递方式详解1. 值传递 (Swap01)形参类型int a, int b调用方式Swap01(a, b)工作原理函数接收的是实参的副本函数体内交换的只是两个局部变量不会影响函数外部的实参。结果调用后a和b的值保持不变10 和 20。2. 指针传递 (Swap02)形参类型int* a, int* b调用方式Swap02(a, b)工作原理函数接收实参的地址指针通过解引用操作直接修改指针所指向的内存单元从而改变实参的值。结果调用后a和b的值发生交换20 和 10。3. 引用传递 (Swap03)形参类型int a, int b调用方式Swap03(a, b)工作原理引用是实参的别名函数内部直接操作实参本身无需解引用语法简洁且高效。结果调用后a和b的值发生交换又变回 10 和 20。程序执行流程分析让我们逐步跟踪main函数中的执行过程初始状态a 10,b 20。调用 Swap01值传递函数内部交换副本不影响实参。输出结果a10, b20。调用 Swap02指针传递函数通过地址修改实参。交换后a20, b10。输出结果a20, b10。调用 Swap03引用传递函数直接操作实参。此时a20, b10交换后a10, b20。输出结果a10, b20。最终我们看到由于Swap02和Swap03先后进行了两次交换a和b的值又回到了初始状态。如果单独调用Swap03它也能正确地交换两个变量的值。为什么最终 a 和 b 没有变化初学者可能会误以为Swap03没有生效其实是因为前面的Swap02已经交换了一次Swap03又交换回来导致最终结果与初始相同。若要验证引用传递的正确性可以注释掉前两个函数调用只保留Swap03的调用int main() { int a 10, b 20; Swap03(a, b); cout a a , b b endl; // 输出 a20, b10 return 0; }引用传递的优势语法简洁使用起来和值传递一样自然无需取地址和解引用。效率高传递的是变量的别名不会产生副本尤其适合传递大型对象。安全引用在声明时必须初始化且一旦绑定不能更改避免了空指针等问题。总结值传递形参是实参的副本函数内修改不影响外部。指针传递形参是指针通过地址间接访问实参能修改外部变量。引用传递形参是实参的别名直接操作实参兼具指针的效率和值传递的简洁性。在C中引用传递常被用于需要修改实参或避免拷贝开销的场景是推荐使用的参数传递方式之一。希望通过本文的讲解你对这三种传递方式有了更清晰的理解。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2410660.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!