ref和out 传递参数(C#)
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可以赋值也可以不赋值,但是在方法体内必须重新赋值。
ref和out 传递参数(C#)的更多相关文章
- C# ref和out传递参数总结
如有雷同,不胜荣幸,若转载,请注明 C#中ref和out传递参数总结,两个都可用来传递参数,ref使用时必须先进行初始化,out则不需要,只要在返回之前赋值即可,文字废话到此,下面直接上例子 ref例 ...
- 给方法传递参数:ref参数和out参数
/*--------------------------------------------------- 给方法传递参数:ref参数和out参数 (P106) ------------------- ...
- 工作中的趣事:聊聊ref/out和方法参数的传递机制
0x00 前言 我在之前的游戏公司工作的时候,常常是作为一只埋头实现业务逻辑的码农.在工作之中不常有同事会对关于编程的话题进行交流,而工作之余也没有专门的时间进行技术分享.所以对我而言上家虽然是一家游 ...
- React对比Vue(03 事件的对比,传递参数对比,事件对象,ref获取DOM节点,表单事件,键盘事件,约束非约束组件等)
import React from 'react'; class Baby extends React.Component { constructor (props) { super(props) t ...
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...
- 通过List<String>动态传递参数给 sqlcommand.Parameters
通过List<String>动态传递参数 private void GetallChecked_TreeNote(TreeNodeCollection aNodes, ref int To ...
- C#传递参数
与函数交换数据的最好方式就是传递参数,在C#中有四种方法来控制参数如何传递给目标方法 C#中的参数修饰符 无修饰 如果一个参数没有用参数修饰符,则认为它将按值传递 out 输出参数由被调用的方法赋值. ...
- spring aop通过joinpoint传递参数
三.总结. 我们可以通过Advice中添加一个JoinPoint参数,这个值会由spring自动传入,从JoinPoint中可以取得. 三.总结. 我们可以通过Advice中添加一个JoinPoint ...
- c#基础语言编程-按值类型和引用类型传递参数
引言 在介绍传递参数介绍前,请明白参数类型和传递方式是不同的.传递方式分为按值类型和引用类型传递参数.参数类型有值类型和引用类型,这个和C++是不同的.这里的传递方式对应c++中的深复制和浅复制. 两 ...
随机推荐
- BZOJ 4300: 绝世好题 动态规划
4300: 绝世好题 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4300 Description 给定一个长度为n的数列ai,求ai的 ...
- asp.net 后台获取flv视频地址进行播放
源码下载:http://download.csdn.net/detail/njxiaogui/7609687 前台:.aspx <table> <tr> <td>& ...
- 关于Asp.Net MVC 中 UpdateModel 的未能更新***模型的 解决方案!
解决方案参考: http://blog.csdn.net/hudaijun/article/details/7293129 想法: 其实,不用UpdateModel,虽然笨些,但不会出什么古怪问题.当 ...
- C# HttpWebRequest 绝技 根据URL地址获取网页信息
如果要使用中间的方法的话,可以访问我的帮助类完全免费开源:C# HttpHelper,帮助类,真正的Httprequest请求时无视编码,无视证书,无视Cookie,网页抓取 1.第一招,根据URL地 ...
- 程序猿每个VPN真卡手
昨天起使用了好久好久觉得是世上最好用的poVPN貌似跑路了 刚刚续费了一年也就这样没有了,可是更多的是心疼没有好用的vpn服务. 不过查到了一个红杏chrome插件,不是vpn 如果单单上网页足够了 ...
- Web 技术人员需知的 Web 缓存知识(转)
最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...
- asp.net项目在IE11下出现“__doPostBack”未定义的解决办法
最 近我们运营的网站有用户反馈在 IE 11 下<asp:LinkButton> 点击出现 “__doPostBack”未定义”,经过一番google,终于知道了原因:ASP.NET 可能 ...
- cocos2dx的lua绑定
一.cocos2dx对tolua++绑定的修正 A.c对lua回调函数的引用 在使用cocos2dx编写游戏时,我们经常会设置一些回调函数(时钟.菜单选择等).如果采用脚本方式编写游戏的话,这些回调函 ...
- tengine-2.1.0 + GraphicsMagick-1.3.20
export LUAJIT_LIB=/usr/local/libexport LUAJIT_INC=/usr/local/include/luajit-2.0/./configure --prefix ...
- HttpListenerCS客户端监听http
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...