博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++和C#中的值传递和引用传递
阅读量:6141 次
发布时间:2019-06-21

本文共 2114 字,大约阅读时间需要 7 分钟。

我们都知道C++传递参数有三种形式,传值,传指针和传引用,而一般C#中只有传值和传引用,但无论是在C#中还是C++参数传递实际上只有两种:值传递和引用传递,值传递就是将对象拷贝一份到栈上,引用传递则传递的就是对象本身。在弄清楚值传递和引用传递之前一定要弄清楚引用指针的区别,指针的概念我想很容易理解,因为在C++中它是实实在在占据内存的一个东东,但是“引用”一词通常容易让初学者混淆,个人认为引用更多是语义上的东西,在C++中把引用就看成是变量本身,调用方法的时候无论传递的是值还是指针,其实传递的都是拷贝,而传递引用的时候即所谓的引用传递传递的就是实参本身。

#include "stdafx.h"#include 
using namespace std;void Func1(int x){ cout<<"实参x的地址:"<<&x<

 而在C#中引用语义上更像是C++中的指针,传递引用实际上也是值传递,传递的是拷贝,而C#中实现引用传递需要关键字ref和out。

class Program    {        static void Main(string[] args)        {            int x = 10;            Console.WriteLine("Func1  Test");            Console.WriteLine("x="+x);            Func1(x);            Console.WriteLine("x=" + x);            Console.WriteLine("Func2  Test");            Console.WriteLine("x=" + x);            Func2(ref x);            Console.WriteLine("x=" + x);            Console.WriteLine("Func3  Test");            A a = new A();            a.X = 10;            Console.WriteLine("a.X="+a.X);            Func3(a);            Console.WriteLine("a.X=" + a.X);            Console.WriteLine("Func4  Test");            A b = new A();            b.X = 10;            Console.WriteLine("a.X=" + b.X);            Func4(ref b);            Console.WriteLine("a.X=" + b.X);            Console.Read();        }        static void Func1(int x)        {            x += 10;            Console.WriteLine("x="+x);        }        static void Func2(ref int x)        {            x += 10;            Console.WriteLine("x=" + x);        }        static void Func3(A a)        {            //a仍然只是实参a的一个拷贝            a = new A();            a.X = 20;            Console.WriteLine("a.X="+a.X);        }        static void Func4(ref A a)        {            //a就是实参b本身            a = new A();            a.X = 20;            Console.WriteLine("a.X=" + a.X);        }    }    class A    {        public int X;    }

 那么到底是指传递还是引用传递呢?值传递的好处是传递时对传人对象的修改实际上是对对象副本的修改,不会影响到原对象的状态(因为传递的是指针或者C#中的引用而影响到原来所指的对象是另外一回事)。按引用传递不需要发生拷贝行为,因此速度更快,特别是大对象的时候,这种优势很明显,如果又不想原对象被修改在C++中采用const引用传递无疑是最好的方法。

转载于:https://www.cnblogs.com/zhanjindong/archive/2013/01/13/2858454.html

你可能感兴趣的文章
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>