首页 > 代码库 > c#中数组名作为参数如何通过修改形参的值来改变实参的值?
c#中数组名作为参数如何通过修改形参的值来改变实参的值?
using System;namespace ConsoleApplication1{ class Program { void f(int[] a) { a[0] = 1;//通过这种方式就可以修改实参的值,说明通过这种方式就是在原内存上来修改元素的值 } static void Main(string[] args) {Program obj=new Program(); int[] a =new int[4] { 6, 7, 8, 9 }; obj.f(a); for (int i = 0;i<a.Length; i++) { Console.Write(a[i]+" "); } Console.ReadLine(); } }}
void f(int[] a) { a = new int[5] { 1, 2, 3, 4, 5 }; }
obj.f(a);
//这种情况不能通过修该形参的值,来达到修改实参的值;
因为数组本身是一个引用类型,引用存放在栈中,引用的值也就是在堆中分配的内存;
就拿此程序分析,一开始形参和实参都指向同一个内存块;但是当a = new int[5] { 1, 2, 3, 4, 5 }; 这条语句执行完后,相当于给形参在堆中分配了一个内存;
此时就完全不相干了!若果真想通过这种方式来改变实参的值,可以采用这样的格式!如下所示:
void f(ref int[] a)
{a = new int[5] { 1, 2, 3, 4, 5 };
}
obj.f(ref a);
c#中数组名作为参数如何通过修改形参的值来改变实参的值?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。