ref和out 传递参数(C#)
2024-09-11 07:23:37
1.参数传递默认都是传递栈空间里面存储的内容
2.如果添加了ref那么传递的都是栈空间地址,而不再是栈空间里面的内容
3.如果添加了out,那么传递的也是栈空间的地址
//写一个方法计算一个int类型数组中每个元素的总和以及最大值和最小值
/// <summary>
///
/// </summary>
/// <param name="intArray"></param>
/// <returns></returns>
static void GatValue(int[] intArray, ref int sum, ref int max, ref int min)
{ sum = ;
max = intArray[];
min = intArray[];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} //最小值
if (min > intArray[i])
{
min = intArray[i];
}
}
}
static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
int sum = , max = , min = ;
//int sum = 0, max = 0, min; //如果min变量在使用的时候,没有赋值,在使用ref关键字传递参数的时候,就会报错,错误消息:“使用了未赋值的局部变量”
GatValue(intArray, ref sum,ref max,ref min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
}
Mian函数
static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
// int sum = 0, max = 0, min = 0;
int sum = , max = , min;
GatValue(intArray, ref sum,ref max,out min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
} static void GatValue(int[] intArray, ref int sum, ref int max, out int min)
{ sum = ;
max = intArray[];
min = intArray[];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} //最小值
if (min > intArray[i])
{
min = intArray[i];
}
}
}
min变量out传递参数
static void GatValue(int[] intArray, ref int sum, ref int max, out int min)
{
//这里要返回三个变量的值,只能是,通过返回值调用了
sum = ;
max = intArray[];
// min = intArray[0];
for (int i = ; i < intArray.Length; i++)
{
//总和
sum += intArray[i]; //最大值
if (max < intArray[i])
{
max = intArray[i];
} ////最小值
//if (min > intArray[i])
//{
// min = intArray[i];
//}
}
} static void Main(string[] args)
{
int[] intArray={,,,,,,,,,};
// int sum = 0, max = 0, min = 0;
int sum = , max = , min;
GatValue(intArray, ref sum,ref max,out min);
Console.Write(sum+" "+max+" "+min);
Console.ReadKey();
}
错误的例子,out参数在使用的时候,必须在方法体内,为变量赋值
这里第四个代码段,里面,使用了out参数传递的变量min,在方法体内没有被赋值,运行的时候会报错:“ 控制离开当前方法之前必须对 out 参数“min”赋值 “
区别:ref传递的参数必须先赋值再使用;
out可以赋值也可以不赋值,但是在方法体内必须重新赋值。
最新文章
- The Safe Navigation Operator (&;.) in Ruby
- oracle 前滚和回滚
- C++ 类的静态成员及静态成员函数
- 【linux】linux下yum安装后Apache、php、mysql默认安装路径
- PHP连接MySQL报错:SQLSTATE[HY000] [2002] Can&#39;t connect to local MySQL server through socket &#39;MySQL&#39; (2)
- 【wikioi】1217 借教室
- QT做界面真是绝美,并且还可嵌入HTML与JS做界面(许多案例)
- js 魔鬼训练
- Asp.net网站的简单发布
- phpcms v9更改后台文章排序的方法
- Material04 MdCardModule和MdButtonModule综合运用
- C#之Excel操作
- 01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置
- Selenium + Python +CSV
- MessageChannel 消息通道
- 你不可不知的Java引用类型之——ReferenceQueue源码详解
- RabbitMQ 选型和对比
- shell脚本并发执行
- 利用python脚本(re)抓取美空mm图片
- 吴裕雄 15-MySQL LIKE 子句