C#数组按值和按引用传递数组区别
2023-09-11 14:16:45 时间
C#中,存储数组之类对象的变量并不是实际存储对象本身,而是存储对象的引用。按值传递数组时,程序将变量传递给方法时,被调用方法接受变量的一个副本,因此在被调用时试图修改数据变量的值时,并不会影响变量的原始值;而按引用传递数组时,被调用方法接受的是引用的一个副本,因此在被调用时修改数据变量时,会改变变量的原始值。下面一个例子说明如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Array
{
class Program
{
public static void FirstDouble(int[] a)
{
for (int i = 0; i < a.Length; i++)
{
a[i] = a[i] * 2;
}
a = new int[] { 11, 12, 13 };
}
public static void SecondDouble(ref int[] a)
{
for (int i = 0; i < a.Length; i++)
{
a[i] = a[i] * 2;
}
a = new int[] { 11, 12, 13 };
}
public static void OutputArray(int[] array)
{
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine("{0}", array[i]);
}
//Console.WriteLine("\n");
}
static void Main(string[] args)
{
int[] array = { 1, 2, 3 };
Console.WriteLine("不带ref关键字方法调用前数组内容:");
OutputArray(array);
FirstDouble(array);
Console.WriteLine("不带ref关键字方法调用后数组内容:");
OutputArray(array);
int [] array1={1,2,3};
Console.WriteLine("带ref关键字方法调用前数组内容:");
OutputArray(array1);
SecondDouble(ref array1);
Console.WriteLine("带ref关键字方法调用后数组内容:");
OutputArray(array1);
Console.ReadLine();
}
}
}
运行结果如下图:
注意的是:调用带ref关键字的方法时,参数中也要加ref关键字。
public static void Test()
{
double[] array = new double[4] { 0, 1, 2, 3 };
A a1 = new A();
A a2 = new A();
a1.value = array;
a2.value = array;
a1.value[0] = 9999;//a1和a2都改变了,这里array是引用类型
}
相关文章
- c# 中内部类的简单介绍 C#内部类
- .net 反射访问私有变量和私有方法 如何创建C# Closure ? C# 批量生成随机密码,必须包含数字和字母,并用加密算法加密 C#中的foreach和yield 数组为什么可以使用linq查询 C#中的 具名参数 和 可选参数 显示实现接口 异步CTP(Async CTP)为什么那样工作? C#多线程基础,适合新手了解 C#加快Bitmap的访问速度 C#实现对图片文件的压
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- c# 把一个匿名对象赋值给一个Object类型的变量后,怎么取这个变量? c# dynamic动态类型和匿名类 详解C# 匿名对象(匿名类型)、var、动态类型 dynamic 深入浅析C#中的var和dynamic
- 装饰者模式的学习(c#) EF SaveChanges() 报错(转载) C# 四舍五入 保留两位小数(转载) DataGridView样式生成器使用说明 MSSQL如何将查询结果拼接成字符串 快递查询 C# 通过smtp直接发送邮件 C# 带参访问接口,WebClient方式 C# 发送手机短信 文件 日志 写入 与读取
- 浅谈JS中的!=、== 、!==、===的用法和区别 JS中Null与Undefined的区别 读取XML文件 获取路径的方式 C#中Cookie,Session,Application的用法与区别? c#反射 抽象工厂
- C# (初入江湖)-几行代码也可以写个电脑屏保
- C# 获取可执行文件路径的上上级目录的方法
- C#实现字符串按多个字符采用Split方法分割得到数组
- C#String.Split (string[], StringSplitOptions) 多参数分割得到数组
- c#多维数组的建立及操作 总结
- [C#] Direct2D 学习笔记 (一)vb.net转换为c#
- C#怎样去掉对于用Splict分隔的数组中的空值?
- C#函数之实现Lagrange插值算法
- 《C#零基础入门之百识百例》(六十三)结构体类型数组 -- 学生数据存储
- 《C#零基础入门之百识百例》(六十六)枚举定义 -- 石头剪刀布猜拳游戏
- 使用二进制实现本地数据保存和读取(C# , Unity)
- C#将一个二维数组行和列元素互换,存到另一个二维数组中
- C#复习题
- C# 比较多个数组(lambda,匿名比较器)
- C# json反序列化 对象中嵌套数组 (转载)
- C#-asp.net-Adding Bundling and Minification to Web Forms
- c#二维数组