C#:数组参数传递问题
数组传递参数的话,如果直接传引用过去。对数组参数的操作会改变原始变量的值。如果不想影响原始变量的话,需要在函数里面定义新的局部数组变量。赋值给局部数组变量,对局部数组变量进行操作。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestYinTong
{
class Program
{
public static void SetArrayA(int[] numbers)
{
for (int n = 0; n < numbers.Length; n++)
{
numbers[n] += 1;
Console.WriteLine("numbers[" + n + "]=" + numbers[n]);
}
}
public static void SetArrayB(int[] numbers)
{
int[] numbersB = {0, 0};
Array.Copy(numbers, numbersB, numbers.Length); //和memcpy中dest、src的位置相反
for (int n = 0; n < numbersB.Length; n++)
{
numbersB[n] += 1;
Console.WriteLine("numbersB[" + n + "]=" + numbersB[n]);
}
}
public static void PrintArray(int[] numbers)
{
for (int n = 0; n < numbers.Length; n++)
{
Console.WriteLine("numbers[" + n + "]=" + numbers[n]);
}
}
public static void Main(string[] args)
{
int[] numbers = {3, 4};
Console.WriteLine("调用方法B之后,输出数组元素:");
SetArrayB(numbers);
Console.WriteLine("调用方法B之后,原始数组元素:");
PrintArray(numbers);
Console.WriteLine("调用方法A之后,输出数组元素:");
SetArrayA(numbers);
Console.WriteLine("调用方法A之后,原始数组元素:");
PrintArray(numbers);
ConsoleKeyInfo i = Console.ReadKey(true);
}
}
}
程序运行结果: