引用参数与值参数
1.值参数:传值给方法,方法中的变量修改不影响参数列表
2.引用参数:ref关键字指定
使用ref两个限定
1)调用函数变量必须非常量
2)调用变量必须初始化
using System; using System.Collections.Generic; using System.Linq; using System.Text;//引用命名空间 using System.Threading.Tasks; using System.Collections; namespace ConsoleApplication4 { class Program { //编写一个方法用于求平方(没有返回值) //此时的参数传递叫做值传递 static void Square(int num) { num *= num; Console.WriteLine("num的平方是"+num); } static void Main(string[] args) { int num = 10; Console.WriteLine(num);//num值为10 Square(num);//函数中num值变为100 Console.WriteLine(num);//主函数中num值仍然为10 Console.ReadKey(); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text;//引用命名空间 using System.Threading.Tasks; using System.Collections; namespace ConsoleApplication4 { class Program { //编写一个方法用于求平方(没有返回值) //此时的参数传递叫做值传递 static void Square(ref int num)//在方法这里加了一个ref关键字 { num *= num; Console.WriteLine("num的平方是"+num); } static void Main(string[] args) { int num = 10; Console.WriteLine(num); Square(ref num);//引用的时候也加ref关键字 Console.WriteLine(num); //主函数中的num变成了100,这里就是引用传递。 Console.ReadKey(); } } }
输出参数
执行方式与ref完全一样,关键字为out
当希望返回多个值时,out非常有用
输出参数与引用参数的区别
未初始化的变量用作ref非法,out合法
函数调用out参数量,必须把它当作尚未赋值(既可以把已赋值的变量当作out参数,但存储在该变量中的值在方法执行时会丢失)
out ref必须在调用及定义方法时声明
using System; using System.Collections.Generic; using System.Linq; using System.Text;//引用命名空间 using System.Threading.Tasks; using System.Collections; namespace ConsoleApplication4 { class Program { //编写一个方法,求出数组中最大的值进行返回,并返回最大值的一个索引 static int maxNum(int[] nums, out int maxNumIndex) { int maxNum = nums[0]; maxNumIndex = 0; for (int i = 0; i < nums.Length; i++) { if (maxNum < nums[i]) { maxNum = nums[i]; maxNumIndex = i; } } return maxNum; } static void Main(string[] args) { int[] myintArray = { 1, 2, 5, 4, 9 }; int maxNumIndex; Console.WriteLine("此数组的最大值是{0},最大值的索引是{1}",maxNum(myintArray,out maxNumIndex),maxNumIndex); Console.ReadKey(); } } }