c#中形参是引用类型但依然是值传递!!
2017-11-29 22:38
363 查看
在做leetcode的时候,发现的c#中的问题,标记一下:
就是说去掉数组中与给定值相同的元素,并且返回心数组长度,由于本人脑子不好使,用了很笨的办法。
public int RemoveElement(int[] nums, int val)
{
int[] temp = null;
int i = 0, j = 0, count = 0;
while (i < nums.Length)
{
if (nums[i] != val)
count++;
i++;
}//求temp的长度,如果没有这一步,则代码报nullreference的错。
temp = new int[count];
i = 0;
while (i < nums.Length)
{
if (nums[i] != val)
{
temp[j] = nums[i];
j++;
}
i++;
}
nums = temp;
return temp.Length;
}最后发现打印传入的nums函数的时候竟然nums没有发生任何改变。。
后来才知道,就算int[]是引用类型,如果不使用关键字ref 或者
out(适用场景不同)全是作为值传递的,在方法内部会拷贝一个副本,方法结束之后,销毁这个副本。
Given nums = [3,2,2,3], val = 3, Your function should return length = 2, with the first two elements of nums being 2.
就是说去掉数组中与给定值相同的元素,并且返回心数组长度,由于本人脑子不好使,用了很笨的办法。
public int RemoveElement(int[] nums, int val)
{
int[] temp = null;
int i = 0, j = 0, count = 0;
while (i < nums.Length)
{
if (nums[i] != val)
count++;
i++;
}//求temp的长度,如果没有这一步,则代码报nullreference的错。
temp = new int[count];
i = 0;
while (i < nums.Length)
{
if (nums[i] != val)
{
temp[j] = nums[i];
j++;
}
i++;
}
nums = temp;
return temp.Length;
}最后发现打印传入的nums函数的时候竟然nums没有发生任何改变。。
后来才知道,就算int[]是引用类型,如果不使用关键字ref 或者
out(适用场景不同)全是作为值传递的,在方法内部会拷贝一个副本,方法结束之后,销毁这个副本。
相关文章推荐
- C#参数传递(值类型、引用类型)
- 传递引用类型参数(C# 编程指南)
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一) 分类: C# 2012-11-01 22:12 620人阅读 评论(0) 收藏
- C#中string和Object类型是引用传递
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一)
- 关于C#值类型,引用类型,值传递,引用传递 --一个比较好的文章
- C#值传递引用类型数据的问题
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一)
- 【原创】理解C#的引用类型的值传递
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习
- 关于C#值类型,引用类型,值传递,引用传递
- C#学习基本概念之传递引用类型参数(二)
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一)
- 传递引用类型参数(C# 编程指南)
- C#形参,实参,值传递参数,引用传递参数,输出参数,参数数组的学习(一)
- 关于C#值类型,引用类型,值传递,引用传递
- c# 值类型和引用类型,值传递和引用传递
- 【转】关于C#值类型,引用类型,值传递,引用传递
- 关于C#值类型,引用类型,值传递,引用传递
- C#中 类和结构 值类型和引用类型以及 值传递和引用传递